背包问题
丶阿明
Hello World!
展开
-
HDU 2546 饭卡
分析:要求余额最少,如果余额一开始就少于5元,直接输出。否则最后刷的那次肯定是要刷最贵的,所以只要求出除去最贵的价格,在m-5的钱中最多花多少。于是就转化为01背包问题,状态转移方程为:dp[j]=max{dp[j],dp[j-val[i]]+val[i]}.# include # include int main() { int i,j,n,m,t,k,val[1005],dp原创 2015-05-27 23:25:42 · 500 阅读 · 0 评论 -
HDU 1864 最大报销额
分析:因为这里“背包容量”和“物体的体积”都是有小数的,所有同一乘以100就是整数了,先把所有的符合条件的发票选出来,然后就是01背包问题了。 # include # include int Max(int a,int b) { return a>b?a:b; } int dp[3000005]; int main() { int i,j,n,原创 2015-08-21 17:35:12 · 351 阅读 · 0 评论 -
HDU 2602 Bone Collector
分析:简单的01背包问题,状态转移方程为:dp[i][v]=max{dp[i-1][v],dp[i-1][v-w[i]]+val[i]},其中dp[i][v]表示前i件物品放在容量为v中的最大值。转化为一维数组的状态转移方程为:dp[v]=max{dp[v],dp[v-w[i]]+val[i]},其中循环为v=V...w[i],保证推f[v]时f[v-w[i]]保存的是状态f[i-1][v-w[i原创 2015-05-27 20:10:35 · 463 阅读 · 0 评论