poj1260 pearls
题目大意:珠宝店有许多珠宝,你需要每种珠宝各买一定的数目,各种珠宝的价格是不一样的,每种珠宝买的时候都必须多付10颗该珠宝的钱,但一种珠宝可以用比它更贵的珠宝来代替,所以有时候用更贵的珠宝来充数可能更省钱。现在问你最少要多少钱?输入数据已按珠宝按价格升序排序。
分析:开始想的时候想了一个二维的方程,但是一维就够了。设f[i]表示买了第i种珠宝,前面的珠宝都已经买了或有更贵的充数,此时所花的最少的钱。
则f[i]=min(f[k]+(sum[i]-sum[k]+10)*price[i])
设y=f[k]+sum[i]*price+10*price,x=sum[k],b=prixe[i],g=f[i],则上式变为:g=y-bx
b是递增的,所以有效决策点满足下凸包性质。
这道题我居然把一处Y(j)写成了(j),WA了许多次,真是够了。粗心害死人,一定要细心一点。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 105
int f[MAXN],w[MAXN],sum[MAXN],que[MAXN],head,tail,last;
struct zhu
{
int sum,w;
}arr[MAXN];
int X(int i)
{
return arr[i].sum;
}
int Y(int i)
{return f[i];
}
bool turnup(int i,int j,int k)
{
if((X(j)-X(k))*(long long)(Y(i)-Y(j))>(X(i)-X(j))*(long long)(Y(j)-Y(k)))
return ;
else return ;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
head=tail=;
last=;
que[tail++]=;
f[]=;
arr[].sum=,arr[].w=;
scanf("%d",&n);
for(int i=;i<=n;i++)
{scanf("%d %d",&arr[i].sum,&arr[i].w);
arr[i].sum+=arr[i-].sum;
}
for(int i=;i<=n;i++)
{
while(head<tail-&&Y(que[head+])-Y(que[head])<=arr[i].w*(long long)(X(que[head+])-X(que[head])))
head++;
int best=que[head];
f[i]=f[best]+(arr[i].sum-arr[best].sum+)*(long long)arr[i].w;
while(head<tail-&&turnup(i,que[tail-],que[tail-])==)
tail--;
que[tail++]=i;
}
printf("%d\n",f[n]);
}
}
poj1260 pearls的更多相关文章
- ACM学习历程——POJ1260 Pearls(动态规划)
Description In Pearlania everybody is fond of pearls. One company, called The Royal Pearl, produces ...
- POJ1260 Pearls(dp,矩阵链乘法)
题目链接. 题目大意: 给定一个n,和两个序列a[i], p[i]. a[i] 表示需要购买 i品质 的数量,p[i] i 等级的价格. 1.每个品质都会有不同的价格,价格依据品质上升而上升 2.买一 ...
- 【poj1260】 Pearls
http://poj.org/problem?id=1260 (题目链接) 题意 购买珍珠,所有珍珠分成n个档次,第i个档次购买每个珍珠的价格为p[i],需要购买第i档次的珍珠a[i]个.若要购买第i ...
- Programming pearls 编程珠玑的题目
Programming pearls 编程珠玑的题目 这段时间有空都在看编程珠玑,很经典的一本书,一边看一边用 python 做上面的题目,我做的都放到 github 上了 https://githu ...
- hdu5009 Paint Pearls (DP+模拟链表)
http://acm.hdu.edu.cn/showproblem.php?pid=5009 2014网络赛 西安 比较难的题 Paint Pearls Time Limit: 4000/2000 M ...
- POJ 1260 Pearls
Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6670 Accepted: 3248 Description In ...
- HDU 5009 Paint Pearls 双向链表优化DP
Paint Pearls Problem Description Lee has a string of n pearls. In the beginning, all the pearls ha ...
- POJ 1260:Pearls(DP)
http://poj.org/problem?id=1260 Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8 ...
- Pearls
Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7980 Accepted: 3966 Description In ...
随机推荐
- hdu 5093 Battle ships
二分图匹配 #include<cstdio> #include<cstring> #include<iostream> #include<cmath> ...
- Phonegap开发的前后台数据交互
在用Phonegap开发时,需要进行前后台数据交互,在网上找资料,很多东西让人一头雾水,最后借鉴了下面的博客: http://blog.sina.com.cn/s/blog_681929ae01017 ...
- 83. Remove Duplicates from Sorted List
Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...
- Javascript模块化编程(二):AMD规范【转】
作者: 阮一峰 日期: 2012年10月30日 这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为 ...
- CentOS搭建Httpd Pyhton3 Django环境
系统环境 centos-6-x86 系统自带httpd 编译安装Python3 pip3 参考 http://www.cnblogs.com/vawter/p/6254170.html 编译安装wsg ...
- Eclipse中web-inf和meta-inf文件夹的信息
http://www.cnblogs.com/chinafine/archive/2010/06/13/1757514.html WEB-INF /WEB-INF/web.xml ...
- hihoCoder挑战赛23
hihoCoder挑战赛23 A.Emulator 题意 给一张图,有\(N(N \le 300)\)个点, 给出任意两点之间的最短路. 求最多可以去掉多少条边,使得任意两点的最短路长度不变. 思路 ...
- HDU 1087 Super Jumping! Jumping! Jumping
HDU 1087 题目大意:给定一个序列,只能走比当前位置大的位置,不可回头,求能得到的和的最大值.(其实就是求最大上升(可不连续)子序列和) 解题思路:可以定义状态dp[i]表示以a[i]为结尾的上 ...
- Android——ListView
1.ArryAdapter: arry_adapter的layout文件: <?xml version="1.0" encoding="utf-8"?&g ...
- iOS 导出 ipa 包时 三个选项的意义
OS 导出 ipa 包时 三个选项的意思 如图 在 iOS 到处 ipa包的时候 会有三个选项 Save for iOS App Store Deployment Save for Ad Hoc D ...