博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 1563 Pearls(动态规划)
阅读量:5244 次
发布时间:2019-06-14

本文共 1138 字,大约阅读时间需要 3 分钟。

/*分析:因为他给的数据是递增的  而求得是这些数据总的 最优解所以我们可以考虑,它的子问题求解不影响总的求解  也就是我们可以先求出 第一个的最优解  第二个....以此类推到总的最优解那么我们想如何利用前面一个的最优解推出当前的最优解  考虑这个与背包问题类似 我们在加入当前物品时判断当前加入后是否影响到前面的最优解那我们就来分析 我们需要什么要的数据因为题目中计算最优解的时候每个等级的Money是固定的  而我们的每个等级所需要买的珍珠数量是不一定的 我的记录最优解的状态是记录前n个等级所得出来的最优解。 则可以确定的是 Money[max],dp[max]是需要的。接下来是分析(每个等级所需要买的珍珠数量是不一定)因为我们是根据前n等级的最优解就是前n等级下的花的最少的钱 我们知道的是当前等级的数量和价格 我们想知道的是用当前等级的价格去买该等级以下的珍珠是否比前面的解法更优 而如果用遍历用当前等级的价格买该等级以下的所有情况。这些情况我们列举一下 就是1...n ,2..n,3....n,...,n-1...n;所需要知道的就是这些阶段的珍珠数量。而我们可以用sum[i]记录前i个的所有珍珠,获得想要阶段的珍珠数量只需要sum[n]-sum[i]就可以了 。分析到这里我们就可以写动态方程了。 dpfor(i=1;i<=n;i++) dp[i]=1000000;for(j=0;j
#include
#include
#include
using namespace std;int sum[101],money[101];int dp[101];int main(void){ int t,n,j; cin>>t; while(t--) { cin>>n; memset(dp,0,sizeof(dp)); sum[0]=0; for(int i=1;i<=n;i++) { cin>>j>>money[i]; sum[i]=sum[i-1]+j; } for(int i=1;i<=n;i++) { dp[i]=INT_MAX; for(j=0;j

 

转载于:https://www.cnblogs.com/woshijishu3/p/4185670.html

你可能感兴趣的文章
【★】浅谈计算机与随机数
查看>>
新的开始
查看>>
Leetcode 226: Invert Binary Tree
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
前台freemark获取后台的值
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>
IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
查看>>
Hive教程(1)
查看>>
第16周总结
查看>>
C#编程时应注意的性能处理
查看>>
Fragment
查看>>
比较安全的获取站点更目录
查看>>
苹果开发者账号那些事儿(二)
查看>>