题意:有红绿蓝三种颜色的画,每种拿三朵可以组成一束花,或者各拿一朵组成花束,告诉你每种花的数目,求出可能组成最多的花束。
设混合的flower个数为x时 ans[x]=x+(R-x)/3+(G-x)/3+(B-x)/3 (1<=R,G,B<=1e9)
容易发现x连续增加3的倍数时 即ans[x]=ans[x+3T] 即ans[]为3个一循环 取连续的三个比较出最优值即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e3+20;
int r,g,b,x;//0<=r,g,b<=1e9
int main()
{
while(cin>>r>>g>>b)
{
// 3 5 5 ans=4
int x=min(min(r,g),b);
int ans=0;
for(int i=0;i<=min(x,2);i++)
{
int y=i+(r-i)/3+(g-i)/3+(b-i)/3;
ans=max(ans,y);
}
cout<<ans<<endl;
}
return 0;
}