hdu 1709

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1709

题意:给n个砝码的重量,问从1到重量总和中不能称出的重量的个数和分别都是谁。

mark:注意新砝码可以加在左盘也可以加在右盘。

代码:

 1 # include <stdio.h>
 2 # include <string.h>
 3 
 4 
 5 int dp[10010] ;
 6 int buff[10010] ;
 7 int n ;
 8 
 9 
10 int abs(int a){return a<0?-a:a;}
11 
12 int main ()
13 {
14     int i, j, sum, num, ans, flag ;
15     while (~scanf("%d",&n))
16     {
17         memset (dp,0,sizeof(dp)) ;
18         
19         dp[0] = 1, sum = 0 ;
20         for(i = 0 ; i < n ; i++)
21         {
22             scanf("%d", &num) ;
23             memset (buff,0,sizeof(buff)) ;
24             for(j=0;j<=sum;j++) if (dp[j])
25             {
26                 buff[j+num] = 1 ;
27                 buff[abs(j-num)] = 1 ;
28             }
29             sum += num ;
30             for(j=0;j<=sum;j++)if(buff[j])
31                 dp[j] = 1 ;
32         }
33         ans = 0 ;
34         for(i=1;i<=sum;i++)if(dp[i]==0) ans++ ;
35         printf ("%d\n", ans) ;
36         flag = 0 ;
37         for(i=1;i<=sum;i++)if(dp[i]==0)
38         {
39             if (flag == 0) flag = 1 ;
40             else printf(" ") ;
41             printf ("%d", i) ;
42         }
43         if (ans != 0) printf("\n") ;
44     }
45     return 0 ;
46 }
posted @ 2012-05-23 14:39  Seraph2012  阅读(347)  评论(0编辑  收藏  举报