poj 2709

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

平摊问题,用贪心算法解决;因为gray可以用任意三种涂料合成,本题的题意就是把gray转换成它的原料(可以是任意三种),再加上以前已经有的,使各种涂漆原料的量尽可能的相近;这样先把每种涂漆按照量的多上进行从小到大排序,每次选择前三个加一,直至gray变为零;

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
int color[14];
while(cin>>n&&n!=0)
{
int i,j;
for(i=0;i<n;i++)
{
scanf("%d",&color[i]);
}
scanf("%d",&color[n]);
sort(color,color+n);
int temp;
//temp=color[n]%50==0?color[n]/50:color[n]/50+1;
while(color[n])
{
int need=(color[2]%50==0)?50:50-color[2]%50;
color[n]--;
            for(i=0;i<3;i++)
color[i]+=1;
for(i=2;i>=0;i--)
{
for(j=i+1;j<n;j++)
{
if(color[j-1]>color[j])
{ temp=color[j-1];color[j-1]=color[j];color[j]=temp; }
else
break;
}
}

}
int res=(color[n-1]%50==0)?color[n-1]/50:color[n-1]/50+1;
cout<<res<<endl;

}
return 0;
}

 

posted @ 2012-04-06 14:55  orangeblog  阅读(323)  评论(0编辑  收藏  举报