HDU-4811 Ball 想法题

有三种颜色的气球,把它们排成一排放在桌子上。

第一个气球不得分。

把一个气球放在末尾得到的分数是它以前气球的颜色种数

把一个气球放在中间得到的分数是它前边气球的颜色种数+后边的气球颜色种数。

求最高得分。

从条件可以推出当两边各放置一个同颜色气球时,此气球提供的分数已经饱和,所以先算出来都不到2的个数(分类是在太麻烦,不如手算),然后算出来有多少个气球是不需要考虑的*一个气球的得分,相加就好了。

#include <iostream>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <vector>
#include <iomanip>
#include <algorithm>
#define LL long long
using namespace std;
LL a[4];
LL f[3][3][3];
int main()
{
	int cnt;
	LL ans;
	f[0][0][0]=0,f[0][0][1]=0,f[0][0][2]=1,f[0][1][1]=1,f[0][1][2]=3,f[0][2][2]=6;
 	f[1][1][1]=3,f[1][1][2]=6,f[1][2][2]=10,f[2][2][2]=15;
	while(scanf("%I64d%I64d%I64d",&a[0],&a[1],&a[2])!=EOF)
	{
		cnt=0;
		for(int i=0;i<3;i++)
		{
			if(a[i]>2)
			{
				cnt+=a[i]-2;
				a[i]=2;
			}
		}
		sort(a,a+3);
		LL p=a[0]+a[1]+a[2];
		ans=f[a[0]][a[1]][a[2]]+cnt*p;
		printf("%I64d\n",ans);
	}
	return 0;
}
时间: 2024-10-05 23:03:23

HDU-4811 Ball 想法题的相关文章

HDU 4811 Ball(贪心)

2014-05-15 22:02 by Jeff Li 前言 系列文章:[传送门] 马上快要期末考试了,为了学点什么.就准备这系列的博客,记录复习的成果. 正文-计数  概率 概率论研究随机事件.它源于赌徒的研究.即使是今天,概率论也常用于赌博.随机事件的结果是否只凭运气呢?高明的赌徒发现了赌博中的规律.尽管我无法预知事件的具体结果,但我可以了解每种结果出现的可能性.这是概率论的核心. "概率"到底是什么?这在数学上还有争议."频率派"认为概率是重复尝试多次,某种结

hdu 4811 Ball(数学)

题目链接:hdu 4811 Ball 题目大意:有三种颜色的球若干,每次向桌子上放一个球,保证是一条序列,每次放球的得分为当前放入序列的球的前面有多少种不同的颜色a,后面的有多少种不同的颜色b,a+b.问说给定球的数量后,最大得分为多少. 解题思路:因为放球顺序是自己定的,所以我们可以尽量早得构造一个序列,使得后面放入球的得分均保持在峰值.那么求峰值就要根据球的数量来决定.我们叫得分为峰值的求为最高得分球,它们有很多个.对于一种颜色来说:0个,表示不能为在最高得分球的左边和右边,换句话来说,就是

hdu 4970小想法题

不要局限于线段树    超时的活,  还以为是自己写矬了       仔细想想    题目只是要你求出i到n的攻击和 就行了   没有别的    O(n)时间复杂度 #include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; __int64 add[100010],del[100010]; __int64 sum[100010

[思路] hdu 4811 Ball

题意: 有三种颜色的小球,每种颜色数量R,Y,B 依次把球放到桌面上成一个序列,每次得分为这个球前面有多少种不同颜色的球+后面有多少种不同颜色的球 问总得分的最大值 思路: 构造前面的球和后面的球先放好,剩下的就放中间了 代码: #include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #include"queue" #incl

hdu 1789 小想法题

思路: 因为每天只能做一种作业  对每个作业都是均等的(不看分数)  有点贪心思想(尽量先写分数大的作业   且尽量在快到截止日期时写 )   理解这点就差不多了 #include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; struct node { int deal; int gard; }num[1100]; int cm

HDU 2410 Barbara Bennett&#39;s Wild Numbers (想法题)

题目链接:HDU 2410 Barbara Bennett's Wild Numbers 题意:给出两串数w,s(长度相同),第一串中有"?",问"?"取的值使w对应的数大于s对应的数 的最大方案数. 思路:W,S一一对应比较: 遇到第一个'?'之前比较情况 1.w[i]<s[i] 方案数0种:break: 2.w[i]>s[i] break.之后有n个''?' 方案数就有10的n次方种. 3.w[i]=s[i] 继续比较,重复1.2两个条件. 遇到'?

HDU 2410 Barbara Bennett&amp;#39;s Wild Numbers (想法题)

题目链接:HDU 2410 Barbara Bennett's Wild Numbers 题意:给出两串数w,s(长度同样),第一串中有"?",问"?"取的值使w相应的数大于s相应的数 的最慷慨案数. 思路:W,S一一相应比較: 遇到第一个'?'之前比較情况 1.w[i]<s[i] 方案数0种:break: 2.w[i]>s[i] break. 之后有n个''?' 方案数就有10的n次方种. 3.w[i]=s[i] 继续比較.反复1.2两个条件. 遇到'

HDU - 5806 NanoApe Loves Sequence Ⅱ 想法题

http://acm.hdu.edu.cn/showproblem.php?pid=5806 题意:给你一个n元素序列,求第k大的数大于等于m的子序列的个数. 题解:题目要求很奇怪,很多头绪但写不出,选择跳过的题,简称想法题. 首先考虑区间的更新方法:区间左端l不动,右端r滑动, 滑到有k个数>=m时,此区间符合条件,并且发现右端点再往右滑到底,此条件一直符合(因为若加入的数小于"第K大的数",则毫无影响.若不然,加入该数会产生一个新的第k大数,保证>="第K大

HDU 4972 Bisharp and Charizard 想法题

Bisharp and Charizard Time Limit: 1 Sec  Memory Limit: 256 MB Description Dragon is watching NBA. He loves James and Miami Heat. Here's an introduction of basketball game:http://en.wikipedia.org/wiki/Basketball. However the game in Dragon's version i