HDU's ACM 1709 The Balance

来源:互联网 发布:java goto break 编辑:程序博客网 时间:2024/06/03 16:39

原题链接:HDU's ACM 1709 The Balance


分析:竟然有左物右码的制约,敢不敢告诉我们。不过还是母函数的方法,参见HDU's ACM 1028 Ignatius and the Princess III,不过因为有左物右码的规则,故有负指数,但考虑实际应将其看成正数,且因为结果只在于有无方法构造这种质量,故系数的具体数值不重要。


AC Code:

<span style="font-family:Microsoft YaHei;font-size:14px;">#include <stdio.h>#include <string.h>#define MAXN 10000#define NUM_MAX 105int coeff1[MAXN];int coeff2[MAXN];int p[NUM_MAX];int ans[MAXN];int main(){int n;int sum;int res;int i, j, k;while(scanf("%d", &n) == 1) {sum = 0;for(i=0;i<n;++i) {scanf("%d", p+i);sum += p[i];}memset(coeff1, 0, sizeof(coeff1));memset(coeff2, 0, sizeof(coeff2));coeff1[0] = coeff1[p[0]] = 1;for(i=1;i<n;++i){for(j=0;j<=sum;++j)for(k=-p[i];k<=p[i];k+=p[i]){coeff2[j+k>0?j+k:-j-k] += coeff1[j];}for(j=0;j<=sum;++j){coeff1[j] = coeff2[j]? 1:0;coeff2[j] = 0;}}res = 0;for(i=0;i<=sum;++i){if(!coeff1[i]){ans[res++] = i;}}if(!res)printf("0\n");else{printf("%d\n%d", res, ans[0]);for(i=1;i<res;++i)printf(" %d", ans[i]);printf("\n");}}return 0;}</span>


0 0
原创粉丝点击