code
1
#include
<
iostream
>
2 using namespace std;
3
4 bool dp( int array[ 7 ])
5 {
6 bool flag[ 60001 ];
7 int i,j,k,sum = 0 ,max = 0 ;
8 for (i = 1 ;i <= 6 ;i ++ )
9 {
10 sum += array[i] * i;
11 }
12
13 if (sum % 2 != 0 )
14 {
15 return false ;
16 }
17
18 memset(flag, 0 , sizeof (flag));
19 flag[ 0 ] = true ;
20 for (i = 1 ;i <= 6 ;i ++ )
21 {
22 if (array[i] > 0 )
23 {
24 for (j = max;j >= 0 ;j -- )
25 {
26 if (flag[j])
27 {
28 for (k = 1 ;k <= array[i];k ++ )
29 {
30 if (j + k * i == sum / 2 )
31 {
32 return true ;
33 }
34
35 if (j + k * i > sum / 2 || flag[j + k * i])
36 {
37 break ;
38 }
39 flag[j + k * i] = true ;
40 }
41 }
42 }
43 }
44 max += array[i] * i;
45 if (max > sum / 2 )
46 {
47 max = sum / 2 ;
48 }
49 }
50 return false ;
51 }
52
53 int main()
54 {
55 int count = 1 ;
56 int array[ 7 ];
57 while ( true )
58 {
59 for ( int i = 1 ;i <= 6 ;i ++ )
60 {
61 scanf( " %d " , & array[i]);
62 }
63
64 if (array[ 1 ] == 0 && array[ 2 ] == 0 && array[ 3 ] == 0 && array[ 4 ] == 0 && array[ 5 ] == 0 && array[ 6 ] == 0 )
65 {
66 break ;
67 }
68 else
69 {
70 if ( ! dp(array))
71 {
72 printf( " Collection #%d:\nCan't be divided.\n\n " ,count ++ );
73 }
74 else
75 {
76 printf( " Collection #%d:\nCan be divided.\n\n " ,count ++ );
77 }
78 }
79 }
80
81 return 0 ;
82 }
2 using namespace std;
3
4 bool dp( int array[ 7 ])
5 {
6 bool flag[ 60001 ];
7 int i,j,k,sum = 0 ,max = 0 ;
8 for (i = 1 ;i <= 6 ;i ++ )
9 {
10 sum += array[i] * i;
11 }
12
13 if (sum % 2 != 0 )
14 {
15 return false ;
16 }
17
18 memset(flag, 0 , sizeof (flag));
19 flag[ 0 ] = true ;
20 for (i = 1 ;i <= 6 ;i ++ )
21 {
22 if (array[i] > 0 )
23 {
24 for (j = max;j >= 0 ;j -- )
25 {
26 if (flag[j])
27 {
28 for (k = 1 ;k <= array[i];k ++ )
29 {
30 if (j + k * i == sum / 2 )
31 {
32 return true ;
33 }
34
35 if (j + k * i > sum / 2 || flag[j + k * i])
36 {
37 break ;
38 }
39 flag[j + k * i] = true ;
40 }
41 }
42 }
43 }
44 max += array[i] * i;
45 if (max > sum / 2 )
46 {
47 max = sum / 2 ;
48 }
49 }
50 return false ;
51 }
52
53 int main()
54 {
55 int count = 1 ;
56 int array[ 7 ];
57 while ( true )
58 {
59 for ( int i = 1 ;i <= 6 ;i ++ )
60 {
61 scanf( " %d " , & array[i]);
62 }
63
64 if (array[ 1 ] == 0 && array[ 2 ] == 0 && array[ 3 ] == 0 && array[ 4 ] == 0 && array[ 5 ] == 0 && array[ 6 ] == 0 )
65 {
66 break ;
67 }
68 else
69 {
70 if ( ! dp(array))
71 {
72 printf( " Collection #%d:\nCan't be divided.\n\n " ,count ++ );
73 }
74 else
75 {
76 printf( " Collection #%d:\nCan be divided.\n\n " ,count ++ );
77 }
78 }
79 }
80
81 return 0 ;
82 }