zoukankan      html  css  js  c++  java
  • HDU4811_Ball

    又是数学题。

    每次放入一个球所得到的的分数为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;
    }
    如有转载,请注明出处(http://www.cnblogs.com/lochan)
  • 相关阅读:
    Linux 常用命令
    去除重叠区间
    Python 小工具之大文件去重
    有趣的pyfiglet
    杨辉三角
    Paginator分页
    Linux用户和用户组
    Grub介绍
    Linux系统运行级别
    Linux系统启动流程
  • 原文地址:https://www.cnblogs.com/lochan/p/3451794.html
Copyright © 2011-2022 走看看