HDU 4472 Count DP题
解题报告:题目大意,给你n个球,要将这n个球从下到上按层次排列,要求同一个层次的的每一个分支的数量都必须相等,问有多少种排列的方法。
此题的一个DP题,假设现在有n个球,要将这n个球排列好,我们就必须将n个球的问题转化成小于n个球的子问题 ,我们可以很明显地观察到,对于每一种排列 的方法,它的最上面的那一层总是只有一个球,所以我们就可以这样出发,将这n个球先减掉一个球,还剩下n-1个球,然后就是下一层怎么排列 的问题了。由于现在还剩下n-1个球,那么我们现在要想的就是把这n-1个球应该怎么排列,很显然,我们可以在第二层只放一个球,也可以放两个球,3个,四个、、、、n-1,判断下面一层放i个球到底是否可行的方法就是判断这n-1个球能否被平均分成i份,因为当第二层放了i个球之后,每个球的下一层要放同样多的球,所以要求就是能将这n-1个球平均分成i份就可以了。
#include<cstdio>
#include<cstring>
const char feng[][]={"","DONG","NAN","XI","BEI","ZHONG","FA","BAI"};
const char hua[][]={"T","S","W"};
int mj[],majiang[];
int judge(char *p) {
if(p[]>=''&&p[]<='') {
if(p[]=='T')
return (p[]-''-);
else if(p[]=='S')
return (+p[]-'');
else return (+p[]-'');
}
else {
for(int i=;i<=;++i)
if(!strcmp(feng[i],p))
return (+i);
}
}
bool find() {
for(int i=;i<;++i) {
if( mj[i] == )
continue;
if(mj[i]>=) {
mj[i]-=;
i=;
continue;
}
else if(i%<= && i <= &&mj[i]>=&&mj[i+]>=&&mj[i+]>=) {
mj[i]--;
mj[i+]--;
mj[i+]--;
i=;
continue;
}
else return false;
}
return true;
}
bool check(int d) {
for(int i=;i<;++i) {
memset(mj,,sizeof(mj));
for(int j=;j<;++j)
mj[majiang[j]]++;
if(mj[d]>=)
continue;
mj[d]++;
if(mj[i]>=) {
mj[i]-=;
if(find()) return true;
}
}
return false;
}
int main() {
char str[];
int Case=;
while(scanf("%s",str)&&str[]!='') {
majiang[]=judge(str);
int flag=;
printf("Case %d:",Case++);
for(int i = ; i<;++i) {
scanf("%s",str);
majiang[i+]=judge(str);
}
for(int i=;i<;++i) {
if(check(i)) {
flag=;
if(i>=&&i<=)
printf(" %d%s",(i%+),hua[i/]);
else printf(" %s",feng[i-]);
}
}
if(!flag)
printf(" Not ready");
printf("\n");
}
return ;
}
HDU 4472 Count DP题的更多相关文章
- HDU 4472 Count (DP)
题目:问n个节点构成完全对称的树有多少种方法. 因为树是完全对称的,所以它的子树也是完全对称的. 对于每个树,拿出一个根节点,枚举剩下的节点能拆分成多少个子树. #include <cstdio ...
- hdu 4472 Count(递推即dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4472 代码: #include <cstdio> #include <cstring ...
- [dp] hdu 4472 Count
意甲冠军: 鉴于n节点,满足子节点的相同的树节点号的同一层较少不同的形式. 思考: dp[i][j] 代表i节点.最后,一个层j方法节点 由于满足同层节点,所以j一层又一层必须是j 整数倍 所以就能得 ...
- HDU 4472 Count(数学 递归)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4472 Problem Description Prof. Tigris is the head of ...
- hdu 4472 Count (递推)
Count Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu 4472 Count
递推,一般的dp值: #include<stdio.h> #include<string.h> #define mod 1000000007 ]; int Dp() { a[] ...
- hdu 4472 Count (2012 ACM-ICPC 成都现场赛)
递推,考虑到一n可以由i * j + 1组合出来,即第二层有j个含有i个元素的子树...然后就可以了.. #include<algorithm> #include<iostream& ...
- HDU 2577 How to Type(dp题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2577 解题报告:有一个长度在100以内的字符串,并且这个字符串只有大写和小写字母组成,现在要把这些字符 ...
- HDU 1422 重温世界杯 DP题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1422 解题报告:DP题,要使旅行的城市最多,关键是要选出一个城市作为开始,以这个城市作为开始的城市时, ...
随机推荐
- lambda表达式,map函数
lambda只是一个表达式,不需要定义函数,故也是匿名函数,用法为:lambda 参数:表达式. x=5 list1=[2,3,4] list2=[10,20,30] s=lambda x:x**3 ...
- Android webview背景设置为透明无效 拖动时背景闪烁黑色
Adndroid 2.X的设置 webview是一个使用方便.功能强大的控件,但由于webview的背景颜色默认是白色,在一些场合下会显得很突兀(比如背景是黑色). 此时就想到了要把webview的背 ...
- hexo发文章
http://blog.csdn.net/qq_36099238/article/details/54576089
- 如何花样展示自己的摄影作品?强大的WebGL能力展示
注意:Windows平台推荐使用Edge.Chrome.FireFox,部分浏览器打不开 P.S.慢慢用鼠标在图片上拖拽会感觉更神奇
- cdq分治解决三维偏序
问题背景 在三维坐标系中有n个点,坐标为(xi,yi,zi). 定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB,zA<=zB.问对于每个点,有多少个点比它小.(n< ...
- idea中添加类和方法注释以及codeCheck
前言:在idea中我们添加类以及类的方法的注释很有必要,让其他人能够看懂这个类或者函数的作用是什么:为了在开发过程中检查自己的编程规范,可以通过codecheck工具进行自我检查和约束 一.在idea ...
- 动态sql中的条件判断取值来源于map 或者 model
- 【设计模式】—— 模板方法Template
前言:[模式总览]——————————by xingoo 模式意图 定义一个类的框架,当它有不同的类时,再具体实现. 比如,我们设计一个跨系统的客户端软件,Windows需要一套展现类,Linux需要 ...
- 【设计模式】—— 适配器模式Adapter
前言:[模式总览]——————————by xingoo 模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一 ...
- 【codevs1690】开关灯 (线段树 区间修改+区间求和 (标记))
[codevs1690]开关灯 2014年2月15日4930 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的 ...