您的位置:首页 > 其它

01背包 装满 hdu 1079 The Balance

2014-09-30 14:19 260 查看
#include <algorithm>
#include <cstring>
#include <cstdio>
#define N 20005
using namespace std;

int i, j, x, kk, n, m;
int t;
int Dp
;
int a
;
int ans
;

int main()
{
while( scanf( "%d", &n )!=-1 )
{
int sum=0;
for( i=0; i<n; i++ )
{
scanf( "%d", &a[i] );
sum+=a[i];
}
memset( Dp, -1, sizeof( Dp ) );
Dp[0]=0;
for( i=0; i<n; i++)
{
for( j=sum; j>=a[i]; j--)
{
if( Dp[j-a[i]]!=-1 )
Dp[j]=max(Dp[j],Dp[j-a[i]]+a[i]);

}
}
for( i=0;i<n;i++ )
{
for( j=a[i];j<=sum;j++ )
{
if( Dp[j]!=-1 )
Dp[j-a[i]]=j-a[i];
}
}

int l=0;
for( j=1;j<=sum;j++ )
{
if( Dp[j]==-1 )
{
ans[l]=j;
l++;
}
}
printf("%d\n",l);
if(l!=0)
{
for( i=0; i<l-1; i++)
printf("%d ",ans[i]);
printf("%d\n",ans[i]);

}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: