2019.3.29

贪心:一直超时,查了后发现要标记.

不过sun和v不写>0会出错?

http://poj.org/problem?id=3040

 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 #define N 15000
 7 #define ll long long
 8 #define inf 0x3f3f3f3f
 9 #define mem(a) memset(a,0,sizeof(a))
10 struct node{
11  int x,y;
12 }f[25],g;
13 int main()
14 {
15     int n;
16     int c,ans=0;
17     cin>>n>>c;
18     int t=n;
19     for(int i=1;i<=t;i++)
20     {
21         cin>>f[i].x>>f[i].y;
22         if(f[i].x>=c) {ans+=f[i].y;i--;t--;}
23     }
24     for(int i=1;i<t;i++)
25     {
26         for(int j=i+1;j<=t;j++)
27         {
28             if(f[i].x<f[j].x)
29             {
30               g=f[i];
31               f[i]=f[j];
32               f[j]=g;
33             }
34         }
35     }
36     int mark[25];
37     while(1)
38     {
39         mem(mark);
40         int sum=c;
41         for(int i=1;i<=t;i++)
42         {
43             if(f[i].y&&sum>0)
44             {
45                 mark[i]+=min(f[i].y,sum/f[i].x);
46                 sum-=f[i].x*mark[i];
47             }
48         }
49         if(sum>0)
50         {
51             int v;
52             for(int i=t;i>=1;i--)
53             {
54                 if(f[i].y&&sum>0)
55                 {
56                     v=min(f[i].y-mark[i],(sum+f[i].x-1)/f[i].x);// hou
57                     if(v>0){
58                       sum-=v*f[i].x;
59                       mark[i]+=v;
60                     }
61                 }
62             }
63         }
64         if(sum>0)break;
65         int v=inf;
66         for(int i=1;i<=t;i++)
67         {
68             if(mark[i])
69             {
70                 v=min(v,f[i].y/mark[i]);
71             }
72         }
73         ans+=v;
74         for(int i=1;i<=t;i++)
75         {
76             if(mark[i])
77             {
78                 f[i].y-=v*mark[i];
79             }
80         }
81     }
82   cout<<ans<<endl;
83     return 0;
84 }
poj 3040 Allowance

猜你喜欢

转载自www.cnblogs.com/XXrll/p/10623213.html
今日推荐