2019ACM-ICPC沈阳网络赛-C-Dawn-K's water(完全背包模板题)

(题面还看不了,晚点加上题面)

AC 代码:

 1 #include <bits/stdc++.h>
 2 #pragma GCC optimize(3)
 3 using namespace std;
 4 typedef long long ll;
 5 const int maxn=1e6+7;
 6 const ll inf=0x3f3f3f3f3f;
 7 const int maxm=1e4;
 8 struct NODE
 9 {
10     ll wei;
11     ll val;
12 } node[maxn];
13 ll f[maxn];
14 template<class T>
15 inline void read(T &x)
16 {
17     T ans=0,f=1;
18     char ch=getchar();
19     while(ch>'9'||ch<'0')
20     {
21         if(ch=='-')f=-1;
22         ch=getchar();
23     }
24     while(ch<='9'&&ch>='0')
25     {
26         ans=ans*10+(ch-'0');
27         ch=getchar();
28     }
29     x=ans*f;
30 }
31 int main()
32 {
33     int n;
34     ll m;
35     while(~scanf("%d %lld",&n,&m))
36     {
37         for(register int i=1; i<=n; ++i)
38         {
39             read(node[i].val);
40             read(node[i].wei);
41         }
42         memset(f,inf,sizeof(f));
43         f[0]=0;
44         for(register int i=1; i<=n; ++i)
45         {
46             for(register int j=node[i].wei; j<=maxm; ++j)
47             {
48                 f[j]=min(f[j],f[j-node[i].wei]+node[i].val);
49             }
50         }
51         ll ansa=inf;
52         int ansb=0;
53         for(register int i=m; i<=maxm; ++i)
54         {
55             if(f[i]<ansa)
56             {
57                 ansa=f[i];
58                 ansb=i;
59             }
60             else if(f[i]==ansa&&ansb<i)
61             {
62                 ansb=i;
63             }
64         }
65         printf("%lld %d\n",ansa,ansb);
66     }
67     return 0;
68 }

猜你喜欢

转载自www.cnblogs.com/CharlieWade/p/11519617.html