您的位置:首页 > 其它

【HDOJ】1709 The Balance

2014-04-16 18:16 411 查看
母函数,指数可以为1也可以为-1,扩大指数加消减发现TLE,于是采用绝对值就过了。

#include <stdio.h>
#include <string.h>

#define MAXNUM 10001

int c1[MAXNUM], c2[MAXNUM];
int w[101];

int myabs(int x) {
return x<0 ? -x:x;
}

int main() {
int n, sum, tmp;
int i, j, k;

while (scanf("%d", &n) != EOF) {
sum = 0;
for (i=1; i<=n; ++i) {
scanf("%d", &w[i]);
sum += w[i];
}
memset(c1, 0, sizeof(c1));
memset(c2, 0, sizeof(c2));
c1[0] = 1;
c1[w[1]] = 1;
tmp = w[1];
for (i=2; i<=n; ++i) {
for (j=0; j<=tmp; ++j)
for (k=0; k<=w[i]; k+=w[i]) {
c2[k+j] += c1[j];
c2[myabs(k-j)] += c1[j];
}
tmp += w[i];
for (j=0; j<=tmp; ++j) {
c1[j] = c2[j];
c2[j] = 0;
}
}
k = 0;
for (i=1; i<=sum; ++i) {
if (c1[i] == 0)
c2[k++] = i;
}
printf("%d\n", k);
for (i=0; i<k; ++i)
if (i)
printf(" %d", c2[i]);
else
printf("%d", c2[i]);
if (k)
printf("\n");
}

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