码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 4811 Ball(数学)

时间:2014-05-18 10:01:02      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:style   class   code   c   tar   http   

题目链接:hdu 4811 Ball

题目大意:有三种颜色的球若干,每次向桌子上放一个球,保证是一条序列,每次放球的得分为当前放入序列的球的前面有多少种不同的颜色a,后面的有多少种不同的颜色b,a+b。问说给定球的数量后,最大得分为多少。

解题思路:因为放球顺序是自己定的,所以我们可以尽量早得构造一个序列,使得后面放入球的得分均保持在峰值。那么求峰值就要根据球的数量来决定。我们叫得分为峰值的求为最高得分球,它们有很多个。对于一种颜色来说:0个,表示不能为在最高得分球的左边和右边,换句话来说,就是不能创造得分;1个,要么在左要么在右,创造一个得分;2个左右各一,创造两个得分;2个以上,一边有两个没有意义,所以还是两个得分。
于是峰值即被求出来了,剩下的就简单多了。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;
typedef long long ll;

inline ll cal (ll u) {
    if (u <= 2)
        return u;
    else
        return 2;
}

int main () {
    ll R, Y, B;
    while (cin >> R >> Y >> B) {
        ll h = cal(R) + cal(Y) + cal(B);
        ll n = R + Y + B;

        ll ans = 0;

        for (ll i = 0; i < n && i < h; i++)
            ans += i;

        if (n > h)
            ans += h * (n-h);;
        cout << ans << endl;
    }    
    return 0;
}

hdu 4811 Ball(数学),布布扣,bubuko.com

hdu 4811 Ball(数学)

标签:style   class   code   c   tar   http   

原文地址:http://blog.csdn.net/keshuai19940722/article/details/26006599

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!