题意:

一个单词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)的更多相关文章

  1. HDU 5791:Two(DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=5791 Two Problem Description   Alice gets two sequences A ...

  2. HDU 4833 Best Financing(DP)(2014年百度之星程序设计大赛 - 初赛(第二轮))

    Problem Description 小A想通过合理投资银行理财产品达到收益最大化.已知小A在未来一段时间中的收入情况,描述为两个长度为n的整数数组dates和earnings,表示在第dates[ ...

  3. HDU 4833 Best Financing (DP)

    Best Financing Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. HDU 1422 重温世界杯(DP)

    点我看题目 题意 : 中文题不详述. 思路 : 根据题目描述及样例可以看出来,如果你第一个城市选的是生活费减花费大于等于0的时候才可以,最好是多余的,这样接下来的就算是花超了(一定限度内的花超),也可 ...

  5. HDU 1176 免费馅饼(DP)

    点我看题目 题意 : 中文题.在直线上接馅饼,能接的最多是多少. 思路 :这个题其实以前做过.....你将这个接馅饼看成一个矩阵,也不能说是一个矩阵,反正就是一个行列俱全的形状,然后秒当行,坐标当列, ...

  6. hdu 4055 Number String(dp)

    Problem Description The signature of a permutation is a string that is computed as follows: for each ...

  7. 【HDU - 4345 】Permutation(DP)

    BUPT2017 wintertraining(15) #8F 题意 1到n的排列,经过几次置换(也是一个排列)回到原来的排列,就是循环了. 现在给n(<=1000),求循环周期的所有可能数. ...

  8. HDU 5375 Gray code(DP)

    题意:给一串字符串,里面可能出现0,1,?,当中问号可能为0或1,将这个二进制转换为格雷码后,格雷码的每位有一个权值,当格雷码位取1时.加上该位权值,求最大权值和为多少. 分析:比赛的时候愚了.竟然以 ...

  9. hdu 1158 Employment Planning(DP)

    题意: 有一个工程需要N个月才能完成.(n<=12) 给出雇佣一个工人的费用.每个工人每个月的工资.解雇一个工人的费用. 然后给出N个月所需的最少工人人数. 问完成这个项目最少需要花多少钱. 思 ...

随机推荐

  1. 3.8学习总结——Android保存信息

    为了保存软件的设置参数,Android平台为我们提供了一个SharedPreferences接口,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用SharedPreferences保存数据, ...

  2. 【PHP数据结构】二叉树的遍历及逻辑操作

    上篇文章我们讲了许多理论方面的知识,虽说很枯燥,但那些都是我们今天学习的前提,一会看代码的时候你就会发现这些理论知识是多么地重要了.首先,我们还是要说明一下,我们学习的主要内容是二叉树,因为二叉树是最 ...

  3. PHP设计模式之享元模式

    享元模式,"享元"这两个字在中文里其实并没有什么特殊的意思,所以我们要把它拆分来看."享"就是共享,"元"就是元素,这样一来似乎就很容易理解 ...

  4. Jmeter系列(17)- 常用断言之JSON断言

    模块分析 Assert JSON Path exists:需要断言的 JSON 表达式 Additionally assert value:如果要根据值去断言,请勾选 Match as regular ...

  5. Nginx系列(8)- Nginx安装 | Docker环境下部署

    Docker环境下部署Nginx https://www.cnblogs.com/gltou/p/15186971.html

  6. Charles安装https证书

    Charles抓取https的包,出现unknow,需要安装https证书.

  7. solidity 错误

    solidity版本 0.7.5 Member "transfer" not found or not visible after argument-dependent looku ...

  8. if 条件

    返回不能被2整除的数 result = [] iter = range(10) for i in iter: if i % 2: print(f'{i}', i % 2) result.append( ...

  9. 关于突破 SESSION 0 隔离场景发现的一些问题

    0x00 Tricks 0x01 用ZwCreateThreadEx 在 Windows 10 下直接通过管理员权限+SeDebugPrivilege启用. 0x02 用CreateRemoteThr ...

  10. python日志配置及调用

    0.日志基础操作 import logging logging.basicConfig( #1.日志输出的位置,终端和文件 filename='access.log', #,不指定默认打到终端上 #2 ...