又是数学题。
每次放入一个球所得到的的分数为x1+x2(x1表示左边的球中颜色的种数,x2表示右边)
其实如果一个球的数量超过了2,那么剩下的就是一个乘法了。 这个理解很简单,因为超过了2的话,说明最优的方案一定是左右各一个,不然如果都在一边的话就只得1分了。
所以我们预处理出所有不超过2的情况的得分(手算吧),然后剩余的就做一个乘法就可以了。
略水,开始没有保证三个数的顺序,手滑。。。。。T_T
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long ll;
using namespace std;
ll a[3][3][3];
ll f[4],n,k,tep;
int main()
{
a[0][0][0]=0,a[0][0][1]=0,a[0][0][2]=1,a[0][1][1]=1,a[0][1][2]=3,a[0][2][2]=6;
a[1][1][1]=3,a[1][1][2]=6,a[1][2][2]=10,a[2][2][2]=15;
while (cin>>f[1]>>f[2]>>f[3])
{
n=k=0;
for (int i=1; i<4; i++)
{
if (f[i]>2) k=2;
else k=f[i];
n+=f[i]-k,f[i]=k;
}
sort(f+1,f+4);
tep=f[1]+f[2]+f[3];
cout<<a[f[1]][f[2]][f[3]]+n*tep<<endl;
}
return 0;
}