码迷,mamicode.com
首页 > 其他好文 > 详细

P1441-砝码称重

时间:2019-08-22 14:41:39      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:include   nbsp   style   ++   amp   def   return   typedef   define   

 1 #include <bits/stdc++.h>
 2 #define _for(i,a,b) for(int i = (a);i < b;i ++)
 3 #define _rep(i,a,b) for(int i = (a);i > b;i --)
 4 #define INF 0x3f3f3f3f
 5 typedef long long ll;
 6 using namespace std;
 7 inline ll read()
 8 {
 9     ll ans = 0;
10     char ch = getchar(), last =  ;
11     while(!isdigit(ch)) last = ch, ch = getchar();
12     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - 0, ch = getchar();
13     if(last == -) ans = -ans;
14     return ans;
15 }
16 inline void write(ll x)
17 {
18     if(x < 0) x = -x, putchar(-);
19     if(x >= 10) write(x / 10);
20     putchar(x % 10 + 0);
21 }
22 int n,m;
23 int a[23];
24 int dp[2003];
25 int vis[23];
26 int rnt = 0;
27 void dfs(int step,int rubb)
28 {
29     if(rubb>step || (step==n&&rubb!=m))
30         return ;
31 
32     if(step==n && rubb==m)
33     {
34         memset(dp,0,sizeof(dp));
35         dp[0] = 1;
36 
37         _for(i,1,n+1)
38             if(!vis[i])
39                 _rep(v,2001,0)
40                     if(v>=a[i] && dp[v-a[i]])
41                         dp[v] = 1;
42 
43         int t = 0;
44         _for(i,1,2003)
45             if(dp[i])
46                 t ++;
47         
48         rnt = max(rnt,t);
49         return ;
50     }
51     
52     dfs(step+1,rubb);
53     vis[step+1] = 1;
54     dfs(step+1,rubb+1);
55     vis[step+1] = 0;
56 }
57 int main()
58 {
59     n = read(), m = read();
60     _for(i,1,n+1)
61         a[i] = read();
62 
63     dfs(0,0);
64     write(rnt);
65     return 0;
66 }

 

P1441-砝码称重

标签:include   nbsp   style   ++   amp   def   return   typedef   define   

原文地址:https://www.cnblogs.com/Asurudo/p/11394152.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!