DP POJ1260
来源:互联网 发布:linux查看gpu使用情况 编辑:程序博客网 时间:2024/06/06 01:17
题目
题目链接
1.题意:
给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。
对于样例Input的第一个例子:
2
100 1
100 2
按常规支付为 (100+10)*1 + (100+10)*2 =330元
但是全部按第二类珍珠的价格支付,同样买200个,虽然总体质量提升了,但是价格也提高了: (202+10)*2=424元。
2.要求:
- N, case数
- c<100, 珍珠的种类
- 第
i 行:a[i] 是要求买该中珍珠的个数。
p[i] 是该珍珠的价格。 - 样例是按照珍珠的价格升序排列。
思路:
这个题目和图像压缩是一模一样的。因为每次购买一种新珍珠的时候都要支付额外的金额,因此该题的主要任务是找出一个分段,确定从哪几种珍珠处断开,使得花费最小。
dp[i] :购买前i 种珍珠所需要的最小花费sum[i] : 前i 中珍珠总计珍珠数目dp[i]=min(dp[i],dp[k]+(sum[i]−sum[k]+10)∗p[i]) ,k从0 ~i−1 .
代码:
#include <cstdio>#include <iostream>#include <cmath>using namespace std;int p[100+5],dp[100+5],a[100+5],sum[100+5];int main(){ int cas; scanf("%d",&cas); while(cas--) { int N; scanf("%d",&N); memset(sum,0,sizeof(sum)); for(int i = 1; i<=N; i++){ scanf("%d%d",&a[i],&p[i]); sum[i] = sum[i-1] + a[i]; } dp[0] = 0; for(int i = 1; i<=N; i++){ dp[i] = 100000000; for(int k = 0; k<i; k++) dp[i] = min(dp[i], dp[k]+(sum[i]-sum[k]+10)*p[i]); } printf("%d\n",dp[N]); }}
0 0
- [DP] poj1260
- poj1260 dp
- poj1260 dp
- [DP]poj1260
- DP POJ1260
- POJ1260 DP
- POJ1260 Pearls DP
- 1poj1260(dp)
- Pearls poj1260 (DP)
- poj1260 Pearls (dp)
- POJ1260 Pearls(DP)
- poj1260 Pearls(Dp)
- POJ1260-Pearls(dp)
- [poj1260] Pearls DP斜率优化
- poj1260
- poj1260
- poj1260
- poj1260
- Shader中的空间概念以及光照模型
- HDU 4067(Random Maze) 最小费用流最大流
- 095 Unique Binary Search Trees II [Leetcode]
- hdu 5204 Rikka with sequence yy题
- hdu-3436 Queue-jumpers(伸展树)
- DP POJ1260
- Header Footer
- python使用mysql数据库
- String类的实现
- mmap最基本示例
- EASTL -- Electronic Arts Standard Template Library
- 华为某次机考题目n个人n盏灯
- 数据结构--图的相关操作实现
- 安装maven私服