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

来源:互联网 发布:优化人才管理是什么 编辑:程序博客网 时间:2024/06/05 22:44

思路:判断这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;}
原创粉丝点击