|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
/*
这是hdu上边第2602道题收集骨头(背包问题)
我的思路代码如下,想的几个样例都对了 不知道为啥还是结果错误没法过,大佬们帮忙看看问题出在哪了!
万分感谢!
*/
#include <bits/stdc++.h>
using namespace std;
int dp[1005][1005];
int w[1005];
int v[1005];
int main() {
int n,m,t;//n物品数量,m背包容量
scanf("%d",&t);
while(t--) {
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++) {
scanf("%d",&v[i]);
}
for(int i=1; i<=n; i++) {
scanf("%d",&w[i]);
}
memset(dp,0,sizeof(dp));
for(int i=1; i<=n; i++) {
for(int j=0; j<=m; j++) {
if(w[i]>j)
dp[i][j]=dp[i-1][j];//当重量大于容量,不拿
else if(w[i]<=j)
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);//dp[i-1][j]为不拿的情况,另一个是拿的情况
}
}
}
printf("%d",dp[n][m]);
return 0;
}
啊 我明白了 输出放错位置了 多个样例就不行了
|
|