求大神帮忙看看昨天360第一题的01背包那里有问题,跪求
#include<string.h>
#include<algorithm>
using namespace std;
int suan(int a[],int n,int m)//一唯
{
int dp[1055];
memset(dp,0,sizeof(dp));
for(int i=1; i<=n; i++)
for(int j=m; j>=a[i]; j--)
{
if(j>=a[i])
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
//dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+a[i]);
}
//return dp[n][m];
return dp[m];
}
int suan2(int a[],int n,int m)//二维
{
int dp[1055][1005];
memset(dp,0,sizeof(dp));
for(int i=1; i<=n; i++)
for(int j=m; j>=a[i]; j--)
{
if(j>=a[i])
//dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+a[i]);
}
return dp[n][m];
//return dp[m];
}
int main()
{
int n,m;
while(cin>>n>>m)
{
int a[1060];
int b[1060];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=1; i<=n; i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=1; i<=n-1; i++)
b[i]=a[i];
int ans=suan(b,n-1,m-1);
int ans1=suan2(b,n-1,m-1);
cout<<ans<<endl;
cout<<ans1<<endl;
cout<<ans+a[n]<<endl;
}
}
#360公司#
#include<algorithm>
using namespace std;
int suan(int a[],int n,int m)//一唯
{
int dp[1055];
memset(dp,0,sizeof(dp));
for(int i=1; i<=n; i++)
for(int j=m; j>=a[i]; j--)
{
if(j>=a[i])
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
//dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+a[i]);
}
//return dp[n][m];
return dp[m];
}
int suan2(int a[],int n,int m)//二维
{
int dp[1055][1005];
memset(dp,0,sizeof(dp));
for(int i=1; i<=n; i++)
for(int j=m; j>=a[i]; j--)
{
if(j>=a[i])
//dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
dp[i][j]=max(dp[i-1][j],dp[i-1][j-a[i]]+a[i]);
}
return dp[n][m];
//return dp[m];
}
int main()
{
int n,m;
while(cin>>n>>m)
{
int a[1060];
int b[1060];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=1; i<=n; i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=1; i<=n-1; i++)
b[i]=a[i];
int ans=suan(b,n-1,m-1);
int ans1=suan2(b,n-1,m-1);
cout<<ans<<endl;
cout<<ans1<<endl;
cout<<ans+a[n]<<endl;
}
}
#360公司#