
背包问题
文章平均质量分 62
Jeromiewn
不可以!
展开
-
hdu2602(01背包模板题)
01背包模板题有N件物品和一个容量为V的背包, 每种物品均只有一件。第i件物品的费用是vo[i],价值是va[i]。求解将哪些物品装入背包可使价值总和最大。状态方程是dp[i][j]=Max(dp[i-1][j],dp[i-1][j-vo[i]]+va[i]);空间优化后dp[j]=Max(dp[j],dp[j-vo[i]]+va[i])#include#includ原创 2016-08-31 16:51:50 · 525 阅读 · 0 评论 -
hdu2639(01背包变形-第k大背包)
01背包变形 求第k大背包多开一维[k],两种情况分别放在A[],B[]两个数组里,将AB合并(即从小到大排序 取第k大)开一个大小为K的数组f[i][v][1..K]。其中f[i][v][k]表示前i个物品、背包大小为 v时,第k优解的值。可以理解成,由f[i-1][v]和f[i-1][v-c[i]]+w[i]这两个有序队列合并得到的。再加入一维k,有序队列f[i-1][v]即f原创 2016-08-31 17:01:36 · 1549 阅读 · 0 评论 -
hdu2546(01背包变形)
01背包变形根据情况变形,由题意知,首先拿出5元买最贵的东西,那接下来就是背包容量m-5,物品数量n-1 的01背包问题了状态方程 dp[j]=max(dp[j],dp[j-vo[i]+vo[i])#include#include #include using namespace std;int vo[1005];int dp[1005];int main(){原创 2016-08-31 17:21:14 · 457 阅读 · 0 评论 -
hdu1203(01背包变形)
01背包变形题目有要求至少收到一份offer的最大概率,只要求得不到的最小概率即可,状态方程dp[j]=Min(dp[j],dp[j-va[i]]*pro[i])//pro[i]表示得不到的概率,dp[n]表示得不到的最小概率,结果用1减去即可再就是注意保留小数输出和%%输出%#include#include #include using namespace std;int原创 2016-08-31 17:29:35 · 541 阅读 · 0 评论 -
hdu1171(01背包变形)
01背包变形 想法变成01背包问题 总数/2并保证a组多 应求b组最大能放的即变成对于b来说的01背包了,总价值为s=sum/2,状态方程为dp[j]=Max(dp[j],dp[j-va[i]]+va[i]);b组为dp[s],则a组为sum-dp[s];#include #include using namespace std;int Max(int x,in原创 2016-08-31 17:41:51 · 718 阅读 · 0 评论