hdu 5890(01背包+bitset优化)

这道题就是给一堆数(n),然后从中删去1到3个,如果剩下的数中能选出10个加起来等于87,输出yes,否则输出No

这道题用到一个bitset优化,bitset用法可以百度下,另外这道题极度坑(注意输入输出)

假如dp[i]=1001,i个数之和为1和4的组合存在,

所以我们要求的就是dp[10][87],

 1 #include<iostream>
 2 #include<string.h>
 3 #include<string>
 4 #include<sstream>
 5 #include<vector>
 6 #include<deque>
 7 #include<map>
 8 #include<algorithm>
 9 #include<iomanip>
10 #include<math.h>
11 #include<set>
12 #include<bitset>
13 using namespace std;
14 
15 int maxn = 0x3f3f3f3f;
16 typedef long long ll;
17 typedef unsigned long long ull;
18 int n;
19 int in[55];
20 bitset<90> dp[11];
21 int flag[55][55][55];
22 int ret(int a, int b, int c)
23 {
24     for (int i = 0; i < 11; i++)
25         dp[i].reset();
26     dp[0][0] = 1;
27     for (int i = 1; i <= n; i++)
28     {
29         if (i != a && i != b && i != c&&in[i]<=87)
30         {
31             for (int j = 10; j >= 1; j--)
32             {
33                 dp[j] |= (dp[j - 1] << in[i]);
34             }
35             if (dp[10][87])
36                 return 1;
37         }
38     }
39     return 0;
40 }
41 
42 int main()
43 {
44     int t, q;
45     int a, b, c;
46     scanf("%d", &t);
47     while (t--)
48     {
49         scanf("%d", &n);
50         for (int i = 1; i <= n; i++)
51             scanf("%d", &in[i]);
52         memset(flag, 0, sizeof(flag));
53         for (int i = 1; i <= n; i++)
54             for (int j = i; j <= n; j++)
55                 for (int k = j; k <= n; k++)
56                 {
57                     if (ret(i, j, k))
58                     {
59                         flag[i][j][k] = flag[i][k][j] = 1;
60                         flag[j][i][k] = flag[j][k][i] = 1;
61                         flag[k][i][j] = flag[k][j][i] = 1;
62                     }
63                 }
64         scanf("%d", &q);
65         while (q--)
66         {
67             scanf("%d%d%d", &a,&b,&c);
68             if (flag[a][b][c])
69                 printf("Yes\n");
70             else
71                 printf("No\n");
72         }
73     }
74     return 0;
75 }

猜你喜欢

转载自www.cnblogs.com/QingFengDaHui/p/10498045.html