POJ 1260 Pearls(DP)
来源:互联网 发布:数据区块链技术概念股 编辑:程序博客网 时间:2024/05/20 04:26
题目链接:http://poj.org/problem?id=1260
题意:
按珍珠等级升序给出n种珍珠的个数和价值,每种珍珠可以可以通过购买等级较高的珍珠来代替,问最小价值是多少?
状态转移方程:
①不取代:
dp[i]=dp[i-1]+(a[i]+10)*p[i];
②取代:
dp[i]=min(dp[i],dp[j]+(sum[i]-sum[j]+10)*p[i]);
证明一下,首先等级不可能存在交叉,a<b<c,如果用c取代a,很明显可以证明用b取代a更优。
初始化:dp[0]=0;
#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;const int INF=0x3f3f3f3f;const int maxn=105;int T,c;int a[maxn],p[maxn];int sum[maxn],dp[maxn];int main(){#ifndef ONLINE_JUDGE freopen("test.in","r",stdin); freopen("test.out","w",stdout);#endif scanf("%d",&T); while(T--){ scanf("%d",&c); memset(sum,0,sizeof(sum)); for(int i=1;i<=c;i++){ scanf("%d%d",&a[i],&p[i]); sum[i]=sum[i-1]+a[i]; } dp[0]=0; for(int i=1;i<=c;i++){ dp[i]=dp[i-1]+(a[i]+10)*p[i]; for(int j=0;j<i;j++) dp[i]=min(dp[i],dp[j]+(sum[i]-sum[j]+10)*p[i]); } printf("%d\n",dp[c]); }return 0;}
0 0
- POJ 1260-Pearls(DP)
- POJ 1260-Pearls(DP)
- POJ 1260 Pearls(DP)
- Poj 1260 Pearls(Dp)
- POJ 1260 Pearls(DP)
- POJ 1260 Pearls(DP)
- POJ 1260Pearls(DP)
- poj 1260 Pearls (DP)
- poj 1260 Pearls(DP)
- poj 1260 Pearls (dp)
- POJ 1260 Pearls DP
- poj-1260-Pearls-dp
- poj 1260Pearls DP
- Pearls - POJ 1260 dp
- POJ 1260-Pearls(dp)
- poj 1260 Pearls dp
- POJ 1260 Pearls(DP)
- POJ 1260 Pearls (DP)
- iOS 创建静态库(.a)
- select、poll、epoll之间的区别总结[整理]
- 使用 Jmeter 做 Web 接口测试
- 使用ASM操作Java字节码,实现AOP原理
- C++ AMP同CUDA之间的性能比较
- POJ 1260 Pearls(DP)
- STS上配置maven 更改maven仓库位置
- 解决Eclipse和myeclipse在进行 html,jsp等 页面编辑时,自动格式化变丑的问题
- [数据结构与算法分析] 栈的链表实现
- Ajax 设置Access-Control-Allow-Origin实现跨域访问
- PHP + MYSQL + APCHE 配置
- 分布式一致性算法:Raft算法
- 区分连接是mongod 还是mongos 的方式 或者副本集
- 解决sitescope发邮件乱码问题