解题报告:题目大意,给你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题的更多相关文章

  1. HDU 4472 Count (DP)

    题目:问n个节点构成完全对称的树有多少种方法. 因为树是完全对称的,所以它的子树也是完全对称的. 对于每个树,拿出一个根节点,枚举剩下的节点能拆分成多少个子树. #include <cstdio ...

  2. hdu 4472 Count(递推即dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4472 代码: #include <cstdio> #include <cstring ...

  3. [dp] hdu 4472 Count

    意甲冠军: 鉴于n节点,满足子节点的相同的树节点号的同一层较少不同的形式. 思考: dp[i][j] 代表i节点.最后,一个层j方法节点 由于满足同层节点,所以j一层又一层必须是j 整数倍 所以就能得 ...

  4. HDU 4472 Count(数学 递归)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4472 Problem Description Prof. Tigris is the head of ...

  5. hdu 4472 Count (递推)

    Count Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  6. hdu 4472 Count

    递推,一般的dp值: #include<stdio.h> #include<string.h> #define mod 1000000007 ]; int Dp() { a[] ...

  7. hdu 4472 Count (2012 ACM-ICPC 成都现场赛)

    递推,考虑到一n可以由i * j + 1组合出来,即第二层有j个含有i个元素的子树...然后就可以了.. #include<algorithm> #include<iostream& ...

  8. HDU 2577 How to Type(dp题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2577 解题报告:有一个长度在100以内的字符串,并且这个字符串只有大写和小写字母组成,现在要把这些字符 ...

  9. HDU 1422 重温世界杯 DP题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1422 解题报告:DP题,要使旅行的城市最多,关键是要选出一个城市作为开始,以这个城市作为开始的城市时, ...

随机推荐

  1. B1048 数字加密

    15/20 #include<bits/stdc++.h> using namespace std; stack<int> s; char a[3]={'J','Q','K'} ...

  2. StackGAN 阅读笔记

    StackGAN 阅读笔记 StackGAN论文下载链接(arxiv) 创新点 提出多尺度的GAN Stage-I GAN Stage-II GAN Stage-I GAN 主要是根据文本描述抓取目标 ...

  3. java的struts2项目实现网站首页只显示域名不显示index.do的做法

    自己的网站快做完了,发现首页显示的时候总是跳转到http://www.xxxxxx.com/index.do 而我想让http://www.xxxxxx.com/ 这样的方式来访问,不想带有后边的in ...

  4. A. Elections

    链接 [http://codeforces.com/contest/1043/problem/A] 题意 有n个投票人已经投个对手ai票,让你求最小的k使得k-ai加起来大于,对手得票总和 分析 一个 ...

  5. LeetCode 141. Linked List Cycle环形链表 (C++)

    题目: Given a linked list, determine if it has a cycle in it. To represent a cycle in the given linked ...

  6. Linux内核分析——第二周学习笔记20135308

    第二周 操作系统是如何工作的 第一节 函数调用堆栈 存储程序计算机:是所有计算机基础的框架 堆栈:计算机中基础的部分,在计算机只有机器语言.汇编语言时,就有了堆栈.堆栈机制是高级语言可以运行的基础. ...

  7. 作业三:LINUX内核的启动过程

    作业三:LINUX内核的启动过程 一.使用GDB跟踪内核从start_kernel到init进程启动(附实验截图) (一)使用自己的Linux系统环境搭建MenuOS的过程 下载内核源代码编译内核 c ...

  8. 第二阶段Sprint7

    昨天:将“录制”及“保存”整合到一起,修复出现的Bug,使之能够正常运行. 今天:把视频录制整合到时间提醒里,实现视频提醒 遇到的问题:额,整进去直接就停止运行了..也没有报错..

  9. WebView 5.0+闪烁以及白屏问题完美解决

    Android webView 在5.0+上启动硬件加速,造成部分手机出现闪烁.白屏等现象 必须写下这篇博客,遇到的问题搞了很久,百度谷歌就是没有完整的答案,记录下来,方便博友们: 需求:一个简单的W ...

  10. TRichEdit怎样新增的内容到最后一行?

    Delphi里使用TRichEdit,使用SetSelTextBuf时可以设置显示的字体格式,但是显示位置是在当前的插入光标后,如果人为改变插入光标的位置,比如在其他位置单,以后再插入的内容位置就没办 ...