题目;
代码;
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
struct beibao{
int val;
int vol;
}bag[1010];
int main()
{
int dp[1010];
int i,j,n,v;
int t;
cin>>t;
while(t--)
{
cin>>n>>v;
for(i=1; i<=n; i++)
cin>>bag[i].val;
for(i=1; i<=n; i++)
cin>>bag[i].vol;
memset(dp,0,sizeof(dp));
for(i=1; i<=n; i++)
for(j=v; j>=bag[i].vol; j--)
dp[j]=max(dp[j],dp[j-bag[i].vol]+bag[i].val);
cout<<dp[v]<<endl;
}
return 0;
}
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
struct beibao{
int val;
int vol;
}bag[1010];
int main()
{
//freopen("input.txt","r",stdin);
int dp[1010];
int i,j,n,v;
int t;
int sum,bound;
cin>>t;
while(t--)
{
cin>>n>>v;
for(i=1; i<=n; i++)
cin>>bag[i].val;
for(i=1; i<=n; i++)
cin>>bag[i].vol;
memset(dp,0,sizeof(dp));
for(i=1; i<=n; i++)
{
sum = 0;
for(j=i; j<=n; j++)
sum += bag[j].val;
bound = max(v-sum,bag[i].vol);
for(j=v; j>=bound; j--)
dp[j]=max(dp[j],dp[j-bag[i].vol]+bag[i].val);
}
cout<<dp[v]<<endl;
}
return 0;
}
背包问题C++实现
本文通过C++代码详细展示了如何解决经典的0-1背包问题。采用动态规划的方法,该程序能够处理多个物品,并计算出在给定背包容量下所能获得的最大价值。代码中包括了两段略有不同的实现方式,用于对比不同算法细节。
1万+

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



