#include <iostream>
#include <string.h>
using namespace std;
int value[1001];
int tiji[1001];
long long dp[1001];
int main(){
int n;
cin>>n;
while(n--){
int a,b;//a代表骨头数,b代表背包体积
cin>>a>>b;
memset(dp, 0, sizeof(dp));
for(int i=0;i<a;i++){
cin>>value[i];
}
for(int i=0;i<a;i++)
cin>>tiji[i];
for(int i=0;i<a;i++){
for(int j=b;j>=tiji[i];j--){
dp[j]=dp[j]>dp[j-tiji[i]]+value[i]?dp[j]:dp[j-tiji[i]]+value[i];
}
}
cout<<dp[b]<<endl;
}
return 0;
} 不要忘记每次要初始化dp数组HDU 2602 Bone Collector (01背包)
最新推荐文章于 2018-07-21 20:42:17 发布
本文探讨了背包问题的基本概念,并通过动态规划算法提供了求解该问题的高效方法。具体步骤包括初始化dp数组、输入物品价值和重量、进行多轮循环更新dp数组值,最终输出最大价值。实例演示了如何利用算法解决实际问题。

&spm=1001.2101.3001.5002&articleId=47042845&d=1&t=3&u=e26306bfb0f742c290746e584294aacd)
1万+

被折叠的 条评论
为什么被折叠?



