首页 > 代码库 > 集训手册贪心题练习题

集训手册贪心题练习题

HDU1009:

 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4  5 #define N 1005 6  7 struct Room{ 8     int j,f; 9     bool operator<(const Room &m)const{10         double rate1 = j*1.0/f;11         double rate2 = m.j*1.0/m.f;12         return rate1>rate2;13     }14 }room[N];15 16 int main()17 {18     int n,m;19     while(~scanf("%d%d",&n,&m)){20         if(n==-1&&m==-1)21             break;22 23         for(int i=0;i<m;i++){24             scanf("%d%d",&room[i].j,&room[i].f);25         }26         sort(room+0,room+m);27 28         double ans = 0;29         for(int i=0;i<m;i++){30             if(n>room[i].f)31             {32                 ans+=room[i].j;33                 n-=room[i].f;34             }35             else{36                 ans+= n*1.0/room[i].f * room[i].j;37                 break;38             }39         }40         printf("%.3f\n",ans);41     }42     return 0;43 }

 HUD 1050

 1 #include<iostream> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 #define MAX 201 6 int f(int n){ 7     return (n+1)/2; 8 } 9 int a[MAX];10 int main(){11     int m,n,x,i,j,t,maxm,times,g;12     cin>>times;13     for(g=0;g<times;g++){14         cin>>x;15         for(i=0;i<x;i++){16             cin>>m>>n;17             if(m>n){18                 t=m;m=n;n=t;19             }20             for(j=f(m);j<=f(n);j++) a[j]++;21         }22         maxm=0;23         for(i=1;i<MAX;i++){24             if(a[i]>maxm) maxm=a[i];25         }26         cout<<10*maxm<<endl;27         memset(a,0,sizeof(a));28     }29     return 0;30 }

HDU 1587
这道题貌似水的过头了、、、每种花数量足够,那么只要找最小值,只买那么一种类型的花就行了,排序都是浪费

 1 #include <cstdio> 2 #include <algorithm> 3  4 int price[1000005]; 5  6 int main() 7 { 8     int n,m; 9     while(~scanf("%d%d",&n,&m)){10         for(int i=0;i<n;i++)11             scanf("%d",price+i);12 13         std::sort(price,price+n);14 15         int ans = m/price[0];16 17         printf("%d\n",ans);18     }19 }

 

集训手册贪心题练习题