首页 > 其他 > 详细

P1441 砝码称重

时间:2019-10-09 13:26:59      阅读:63      评论:0      收藏:0      [点我收藏+]
技术分享图片
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 using namespace std;
 5 
 6 int w[21];
 7 bool f[2010];
 8 bool th[21];
 9 int n, m;
10 int maxn;
11 
12 void dp()
13 {
14     memset(f, false, sizeof(f));
15     int cnt = 0;
16     int sum = 0;
17     f[0] = true;
18     for (int i = 1; i <= n; i++)
19     {
20         if (th[i]) continue;
21         for (int j = sum; j >= 0; j--)
22         {
23             if (f[j] && !f[j + w[i]])
24             {
25                 f[j + w[i]] = true;
26                 cnt++;
27             }
28         }
29         sum += w[i];
30     }
31     maxn = max(maxn, cnt);
32 }
33 
34 
35 void dfs(int num, int now)
36 {
37     if (m < now) return;
38     if (num == n + 1)
39     {
40         if (now == m)
41         {
42             dp();
43         }
44         return;
45     }
46     th[num] = true;
47     dfs(num + 1, now + 1);
48     th[num] = false;
49     dfs(num + 1, now);
50 }
51 
52 int main()
53 {
54     cin >> n >> m;
55     for (int i = 1; i <= n; i++)
56     {
57         cin >> w[i];
58     }
59     dfs(1, 0);
60     cout << maxn;
61 }
View Code

 

P1441 砝码称重

原文:https://www.cnblogs.com/thjkhdf12/p/11641112.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!