摘要: 原题 题目链接 题目分析 明显的01背包,但还是由细节需要处理,设置dp[i][j]=前i头牛中选的TF为j时最大的TS值,由于TF可能为负数因此要加一个基数使其在大于等于零,dp初始化为-1,dp[0][0]=0.更新的时候dp[i][j]=max(dp[i-1][j-f[i]]+s[i],dp[ 阅读全文
posted @ 2019-08-26 22:07 VBL 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 原题 题目链接 题目分析 多重背包题,在放入的时候需要按a的大小排序.定义dp[i][j]为前i个积木凑成j高度,第i个物品最多剩下多少,然后j从0遍历到a[i],dp初始化为-1,dp[0][0]=0.更新方式跟多重背包完全一样,if(dp[i-1][j]!=-1) dp[i][j]=c[i];e 阅读全文
posted @ 2019-08-26 19:28 VBL 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 原题 题目链接 题目分析 有点难的dp,首先可以这样定义dp[j][k],选了j个人,它们的p[i]-d[i]的和为k,此时的最大p[i]+d[i]的值,由于p[i]-d[i]的值可能为负,所以必须处理一下,也就是让k的值加上m*20(也就是设k=m*20为0),就可以保证k的值为非负整数.这个dp 阅读全文
posted @ 2019-08-26 15:58 VBL 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 原题 题目链接 题目分析 有点难的dp,首先考虑一下对于第i个山坡,要使单调,不是把它改成跟上一个相等就是把它改成跟下一个相等,因此改完后的值肯定是原序列的一个值,首先考虑递增,先把原序列按从小到大排个序,把它当为b[i],然后对于原序列的每个数,考虑将它变为b[i]中的其中一个使得其花费最小,因此 阅读全文
posted @ 2019-08-26 10:01 VBL 阅读(107) 评论(0) 推荐(0) 编辑