您的位置:首页 > 其它

51nod 1007 正整数分组 背包思路题

2017-09-26 15:59 351 查看
思路:判断这n个数能组成的数有哪些, 枚举差值,维护最小值。

看到sum的范围小于10000就得想到背包了。。。

#include <bits/stdc++.h>
using namespace std;
const int inf =0x3f3f3f3f;
typedef long long LL;
const int MAXN = 10005;
const int mod = 1e9+7;
int a[105];
int dp[MAXN];
int main()
{
int n;
while(~scanf("%d", &n))
{
int ans=inf, sum=0;
for(int i=1; i<=n; ++i)
{
scanf("%d", &a[i]);
sum+=a[i];
}
memset(dp, 0, sizeof(dp));
dp[0]=1;
for(int i=1;i<=n;++i)
for(int j=sum;j>=a[i];--j)
dp[j]=max(dp[j], dp[j-a[i]]);
for(int i=1;i<=sum/2;++i)
if(dp[i])
ans=min(ans, sum-i-i);

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