hdu 1502 Regular Words(DP)
题意:
一个单词X由{A,B,C}三种字母构成。
A(X):单词X中A的个数。B(X),C(X)同理。
一个单词X如果是regular word必须满足A(X)=B(X)=C(X)且对于X的任意前缀有A(X)>=B(X)>=C(X)。
给一个数n。问长度为3n的regular word有多少个。
思路:
dp[a][b][c]:前a+b+c个字母由a个A,b个B,c个C构成。
然后就可以分解了,,,
*:用到高精度
代码:
int const MAXN=99999999;
int const DLEN=8; class BigNum{
private:
int a[20];
int len;
public:
BigNum(){};
BigNum(const int);
BigNum &operator=(const BigNum &);
BigNum operator+(const BigNum &) const;
void print();
}; BigNum::BigNum(const int b){
int c,d=b;
len=0;
mem(a,0);
while(d>MAXN){
c=d-(d/(MAXN+1))*(MAXN+1);
d=d/(MAXN+1);
a[len++]=c;
}
a[len++]=d;
} BigNum & BigNum::operator=(const BigNum & n){
int i;
len=n.len;
mem(a,0);
rep(i,0,len-1) a[i]=n.a[i];
return *this;
} BigNum BigNum::operator+(const BigNum & T) const{
BigNum t(*this);
int i,big;
big=T.len>len?T.len:len;
for(int i=0;i<big;++i){
t.a[i]+=T.a[i];
if(t.a[i]>MAXN){
t.a[i+1]++;
t.a[i]-=(MAXN+1);
}
}
if(t.a[big]!=0) t.len=big+1; else t.len=big;
return t;
} void BigNum::print(){
int i;
cout<<a[len-1];
for(i=len-2;i>=0;i--){
cout.width(DLEN);
cout.fill('0');
cout<<a[i];
}
cout<<endl;
} int n;
BigNum dp[62][62][62]; int main(){ int n;
while(scanf("%d",&n)!=EOF){
mem(dp,0);
dp[0][0][0]=BigNum(1); rep(a,0,n){
rep(b,0,n){
rep(c,0,n){
if(a==0 && b==0 && c==0) continue;
if(a>=b && b>=c){
if(a-1>=b && a>=1){
dp[a][b][c]=dp[a][b][c]+dp[a-1][b][c];
}
if(b-1>=c && b>=1){
dp[a][b][c]=dp[a][b][c]+dp[a][b-1][c];
}
if(c>=1){
dp[a][b][c]=dp[a][b][c]+dp[a][b][c-1];
}
}
}
}
}
dp[n][n][n].print();
printf("\n");
} return 0;
}
hdu 1502 Regular Words(DP)的更多相关文章
- HDU 5791:Two(DP)
http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description Alice gets two sequences A ...
- HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))
Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[ ...
- HDU 4833 Best Financing (DP)
Best Financing Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- HDU 1422 重温世界杯(DP)
点我看题目 题意 : 中文题不详述. 思路 : 根据题目描述及样例可以看出来,如果你第一个城市选的是生活费减花费大于等于0的时候才可以,最好是多余的,这样接下来的就算是花超了(一定限度内的花超),也可 ...
- HDU 1176 免费馅饼(DP)
点我看题目 题意 : 中文题.在直线上接馅饼,能接的最多是多少. 思路 :这个题其实以前做过.....你将这个接馅饼看成一个矩阵,也不能说是一个矩阵,反正就是一个行列俱全的形状,然后秒当行,坐标当列, ...
- hdu 4055 Number String(dp)
Problem Description The signature of a permutation is a string that is computed as follows: for each ...
- 【HDU - 4345 】Permutation(DP)
BUPT2017 wintertraining(15) #8F 题意 1到n的排列,经过几次置换(也是一个排列)回到原来的排列,就是循环了. 现在给n(<=1000),求循环周期的所有可能数. ...
- HDU 5375 Gray code(DP)
题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时.加上该位权值,求最大权值和为多少. 分析:比赛的时候愚了.竟然以 ...
- hdu 1158 Employment Planning(DP)
题意: 有一个工程需要N个月才能完成.(n<=12) 给出雇佣一个工人的费用.每个工人每个月的工资.解雇一个工人的费用. 然后给出N个月所需的最少工人人数. 问完成这个项目最少需要花多少钱. 思 ...
随机推荐
- Django学习day10随堂笔记
每日测验 """ 今日考题 1.默写ajax基本语法,及提交json数据和文件都需要添加哪些额外参数 2.什么是序列化,截止目前为止你所接触过的序列化有哪些 3.批量插入 ...
- 整理STC延时函数时遇到的玄学问题
void Delay { unsigned char i, j; i = 11; j = 190; do { while (--j); } while (--i); } void Delay { un ...
- 【PHP数据结构】图的遍历:深度优先与广度优先
在上一篇文章中,我们学习完了图的相关的存储结构,也就是 邻接矩阵 和 邻接表 .它们分别就代表了最典型的 顺序存储 和 链式存储 两种类型.既然数据结构有了,那么我们接下来当然就是学习对这些数据结构的 ...
- PHP怎么遍历对象?
对于php来说,foreach是非常方便好用的一个语法,几乎对于每一个PHPer它都是日常接触最多的请求之一.那么对象是否能通过foreach来遍历呢? 答案是肯定的,但是有个条件,那就是对象的遍历只 ...
- 解决IE浏览器 点击子元素重复调用执行 mouseover 与mouseout兼容性问题
将函数配对换为下面2个就可以解决兼容性问题. mouseenter() mouseleave(0
- Linux系列(23) - echo
作用:打印 格式:echo [选项] [输出内容] 选项:-e :支持反斜线控制的字符转换 前置条件:必须加选项-e才能使用 控制字符 作用 \a 输出警告音 \b 退格符,也就是向左删除键 \n 换 ...
- django setting.py配置文件解读-02
定义项目目录常量 import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR ...
- django 如何在HMTL中使用媒体media_url
django 如何在HMTL中使用媒体media_url中指定的路径 第一种: 一. setting.py里,一般图片或者文件上传路径都是是以下设置, MEDIA_URL = '/media/' ...
- file_get_contents('php://input') 数据如何转换成数组
前台表单页:demo01.html 后台:demo01.php 输出结果: 备注:若前台通过Ajax的post提交过来的是json数据,需要对json数据进行解析:$data = json_decod ...
- C# 在PPT中添加数学公式
本次内容介绍在C#程序中给PPT幻灯片添加Latex数学公式,添加公式前,首先需要在幻灯片中插入一个Shape形状,在形状的段落中通过方法Paragraphs.AddParagraphFromLate ...