#include<stdio.h>
#include<string.h>
int max(int a1,int a2)
{
return a1=a1>a2?a1:a2;
}
struct bag
{
int v;
int pay;
}s[10006];
int dp[10005];
int main()
{
int n,i,j,m,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d",&s[i].pay);
for(i=1;i<=n;i++)
scanf("%d",&s[i].v);
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
for(j=s[i].v;j<=m;j++)
dp[j]=max(dp[j],dp[j-s[i].v]+s[i].pay);
printf("%d\n",dp[m]);
}
return 0;
}
完全背包
#include<stdio.h>
int max(int a1,int a2)
{
return a1=a1>a2?a1:a2;
}
struct bag
{
int v;
int pay;
}s[10006];
int dp[10005];
int main()
{
int n,i,j,m,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d%d",&s[i].v,&s[i].pay);
for(i=0;i<=m;i++)
dp[i]=0;
for(i=1;i<=n;i++)
for(j=m;j>=s[i].v;j--)//必须从后向前刷新数据
dp[j]=max(dp[j],dp[j-s[i].v]+s[i].pay);
printf("%d\n",dp[m]);
}
return 0;
}
背包01