Poj 1260 Pearls(Dp)
2015-07-20 23:52
253 查看
题意:要买若干种价值的珍珠,但买某种珍珠必须多付10颗此种珍珠的价钱,及如果买价值为1的珍珠100颗,必须付的钱数为110。一颗珍珠可以用比它贵的珍珠 充数,因此买多种珍珠的时候用贵的代替便宜的可能更省钱。例如买100颗价值为2的、1颗价值为1的,此时买101颗价值为2的为较优方案。输入要买的若 干种珍珠,可用高价珍珠充数的条件下,问最少需要花费多少钱。
思路:假设有两个档次的珍珠i和j,i<j,那么如果i和j合并了,那么i+1,i+1.....j-1一定都和j合并了,否则不可能得到最优解,由此可以得到状态转移方程
dp[i] = min (dp[i], (sum[i] - sum[j] + 10) * p[i] + dp[j]);
题意:要买若干种价值的珍珠,但买某种珍珠必须多付10颗此种珍珠的价钱,及如果买价值为1的珍珠100颗,必须付的钱数为110。一颗珍珠可以用比它贵的珍珠 充数,因此买多种珍珠的时候用贵的代替便宜的可能更省钱。例如买100颗价值为2的、1颗价值为1的,此时买101颗价值为2的为较优方案。输入要买的若 干种珍珠,可用高价珍珠充数的条件下,问最少需要花费多少钱。
思路:假设有两个档次的珍珠i和j,i<j,那么如果i和j合并了,那么i+1,i+1.....j-1一定都和j合并了,否则不可能得到最优解,由此可以得到状态转移方程
dp[i] = min (dp[i], (sum[i] - sum[j] + 10) * p[i] + dp[j]);
#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<iostream> #include<algorithm> #include<vector> #include<map> #include<queue> #include<stack> #include<string> #include<map> #include<set> #define eps 1e-6 #define LL long long using namespace std; const int maxn = 100 + 5; const int INF = 0x3f3f3f3f; int c; int num[maxn], val[maxn], sumv[maxn]; int d[maxn]; void init() { cin >> c; for(int i = 1; i <= c; i++) { cin >> num[i] >> val[i]; sumv[i] = sumv[i-1] + num[i]; } } void solve() { for(int i = 1; i <= c; i++) { d[i] = INF; for(int j = 1; j <= i; j++) { d[i] = min(d[i], d[j-1]+(sumv[i]-sumv[j-1]+10)*val[i]); } } cout << d[c] << endl; } int main() { //freopen("input.txt", "r", stdin); int t; cin >> t; while(t--) { init(); solve(); } return 0; }
相关文章推荐
- MySQL行列转换拼接
- NSURLSession学习笔记(一)简介
- 【安卓基础二】eclipse+SDK、sdk目录
- 动态规划求解编辑距离
- hadoop如何使用第三方依赖jar包
- java 设计模式 责任链 filter
- ubuntu14.04编译Tiny210 android文件系统
- Scala中Abstract Types 成员
- 2015-07-20日总结
- POJ 3104 Drying
- Visual Studio 2015 正式版下载
- poj2387 最短路
- 字符串A - Palindromes
- hbase的master节点HMaster服务自动停止的解决方法
- bnu 28890 &zoj 3689——Digging——————【要求物品次序的01背包】
- replication复制集
- 生产场景NFS共享存储优化及实战
- 代码吐血?还是我?
- wpf的xml配置文件的读与写(一)
- iOS中隐私数据进行加密的方法