题意:你的空间为n的背包,m个物品,如何选择m个物品,使空间为n的背包得到最大限度的利用。
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N=10005;
bool map[25][N],dp[N];
int a[25];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(dp,0,sizeof(dp));
memset(map,0,sizeof(map));
int imax=0;
dp[0]=1;
for(int i=0;i<m;i++) scanf("%d",&a[i]);
for(int i=m-1;i>=0;i--)
{
for(int j=n;j>=a[i];j--)
{
if(dp[j-a[i]])
{
dp[j]=1;
map[i][j]=1;
imax=max(imax,j);
}
}
}
for(int i=0,j=imax;i<m&&j>0;i++)
{
if(map[i][j]) {printf("%d ",a[i]);j-=a[i];}
}
printf("sum:%d\n",imax);
}
}