這題比較犀利,特別的地方是在配灰色的時候。
用judge[]存儲減去對應顏色后剩余的體積,用這部分配灰色。當然judge中的每一項都有大于0
配法:每排一次序配1ml,保證這1ml是由體積最多的三種顏料配成。
最初的時候是排序,然后一下配最大的三個當中最小的那個的體積,這是不夠貪的。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int color[13]={0};
int judge[13]={0};
int deal(int n)
{
int ans=0,t;
sort(judge+1, judge+1+n);
while(judge[n]&&judge[n-1]&&judge[n-2])
{
ans++;
judge[n]--;
judge[n-1]--;
judge[n-2]--;
sort(judge+1, judge+1+n);
}
return ans;
}
int main()
{
int n,i;
while(cin>>n,n)
{
int t=0 ,num;
bool f=true;
for(i=1; i<=n; i++)
cin>>color[i];
cin>>num;
for(t=0; t<=1000; t++)
{
f=true;
for(int j=1; j<=n; j++)
{
judge[j]=50*t;
judge[j]-=color[j];
if(judge[j]<0)f=false;
}
if(f==true)
{
int ans=deal(n);
if( ans>=num) { cout<<t<<endl; break; }
}
}
}
system("pause");
return 0;
}