首页 > 代码库 > POJ 2709
POJ 2709
一道比较基础的贪心题,贪心的时候要从两点出发,一个是从剩余的最多的颜料开始合成灰色颜料,另一个就是合成时要1ml1ml的合成。
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 using namespace std; 6 7 bool cmp(int p,int q) 8 { 9 return p>q; 10 } 11 12 int main() 13 { 14 int n; 15 int a[20]; 16 int b[20]; 17 int t; 18 while(scanf("%d",&n)&&n) 19 { 20 memset(a,0,sizeof(a)); 21 memset(b,0,sizeof(b)); 22 int sum=0; 23 for(int i=0;i<n;i++) 24 cin>>a[i]; 25 cin>>t; 26 sort(a,a+n,cmp); 27 if(a[0]%50==0)//先确定不合成灰色颜料时最少需要多少套颜料 28 sum=a[0]/50; 29 else 30 sum=a[0]/50+1; 31 if(t!=0)//如果需要灰色颜料 32 { 33 for(int i=0;i<n;i++)//将剩余的颜料存起来 34 b[i]=sum*50-a[i]; 35 while(t>0)//判断灰色颜料是否合成够数 36 { 37 sort(b,b+n,cmp);//每次排序找到最多的三种颜料 38 if(b[2]!=0)//颜料够就1ml减少 39 { 40 t--; 41 b[0]--; 42 b[1]--; 43 b[2]--; 44 } 45 else//颜料不够就多加一套 46 { 47 sum++; 48 for(int i=0;i<n;i++) 49 b[i]+=50; 50 } 51 } 52 } 53 cout<<sum<<endl; 54 } 55 return 0; 56 }
POJ 2709
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。