POJ 2711 Regular Words(DP + 高精度)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1711
题目大意:给定一个正整数n,产生一个3*n位长的串,要求这个串中(1)A、B、C的数目都是n;(2)这个串的任意一个前缀,也就是从开始往后任意一段连续序列中字符的个数A>=B>=C。求满足条件的数目。
Sample Input
2 3
Sample Output
5 42
分析:令dp[i][j][k] 表示从第一个字符开始,长度为i+j+k的串,A的个数为 i ,B的个数为 j ,C的个数为 k 的字符串的个数。
则如果i>=j>=k 则可以根据最后一个字符是A, B还是C,分三类计数,假设是最后一位是A,由于题目的要求是前缀 ,所以前面的放法数恰好是dp[i-1][j][k]
另外两种情况同理,加的时候注意下标小于零就不要了,答案为dp[n][n][n]
后来发现是高精度,需要再加一维dp[i][j][k][p],最后一维是该数字的大数表示。
这样如果dp数组用int类型表示,会超内存。后来改用short类型,内存36000险过,用char类型也是可以过的。short型理论上用输出%hd的,不过%d也可以。
代码如下:
# include<iostream>
# include<cstdio>
# include<cstring>
using namespace std; short dp[][][][];
void init()
{
short i,j,k,p,temp;
memset(dp,,sizeof(dp));
dp[][][][] = ;
for(i=; i<=; i++)
for(j=i; j<=; j++)
for(k=j; k<=; k++)
{
if(i>) //dp[i][j][k] += dp[i-1][j][k];
{
temp = ;
for(p=; p<=; p++)
{
dp[i][j][k][p] += dp[i-][j][k][p] + temp;
if(dp[i][j][k][p]>)
{
temp = ;
dp[i][j][k][p] -= ;
}
else
temp = ;
}
}
if(j>) //dp[i][j][k] += dp[i][j-1][k];
{
temp = ;
for(p=; p<=; p++)
{
dp[i][j][k][p] += dp[i][j-][k][p] + temp;
if(dp[i][j][k][p]>)
{
temp = ;
dp[i][j][k][p] -= ;
}
else
temp = ;
}
}
if(k>) //dp[i][j][k] += dp[i][j][k-1];
{
temp = ;
for(p=; p<=; p++)
{
dp[i][j][k][p] += dp[i][j][k-][p] + temp;
if(dp[i][j][k][p]>)
{
temp = ;
dp[i][j][k][p] -= ;
}
else
temp = ;
}
}
}
} int main()
{
init();
int n;
while(scanf("%d",&n)!=EOF)
{
int i;
for(i=; i>=; i--)
if(dp[n][n][n][i] != ) break;
for(; i>=; i--) //输出高精度数
printf("%d",dp[n][n][n][i]);
printf("\n\n");
}
return ;
}
POJ 2711 Regular Words(DP + 高精度)的更多相关文章
- HDU 1502 Regular Words DP+高精度
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1502 题目大意:找出总的满足条件的字符串数,num(a)=num(b)=num(c)且任何前缀均满足n ...
- poj 1205 :Water Treatment Plants (DP+高精度)
题意:有n个城市,它们由一个污水处理系统连接着,每个城市可以选择 1.将左边城市过来的污水和右边城市过来的污水连同本身的污水排到河里 >V< 2.将左边来的污水连同自己的污水排到右边 ...
- 1166 矩阵取数游戏[区间dp+高精度]
1166 矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description [ ...
- bzoj 1089 [SCOI2003]严格n元树(DP+高精度)
1089: [SCOI2003]严格n元树 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 1250 Solved: 621[Submit][Statu ...
- POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流)
POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流) Description Yo ...
- CF23 E. Tree 树形dp+高精度
题目链接 CF23 E. Tree 题解 CF竟让卡常QAQ dp+高精度 dp[x][j]表示以x为根的子树,x所属的联通块大小为j,的最大乘积(不带j这块 最后f[x]维护以x为根的子树的最大答案 ...
- POJ.3624 Charm Bracelet(DP 01背包)
POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...
- 【bzoj2764】[JLOI2011]基因补全 dp+高精度
题目描述 在生物课中我们学过,碱基组成了DNA(脱氧核糖核酸),他们分别可以用大写字母A,C,T,G表示,其中A总与T配对,C总与G配对.两个碱基序列能相互匹配,当且仅当它们等长,并且任意相同位置的碱 ...
- DP+高精度 URAL 1036 Lucky Tickets
题目传送门 /* 题意:转换就是求n位数字,总和为s/2的方案数 DP+高精度:状态转移方程:dp[cur^1][k+j] = dp[cur^1][k+j] + dp[cur][k]; 高精度直接拿J ...
随机推荐
- git 版本历史
版本:git rev-parse --git-dir显示Git版本库的位置 --show-cdup显示当前工作区目录的深度 --parseopt解析命令行参数 $ git rev-parse - ...
- 代码-Weka的决策树类J48
package kit.weka; /** * desc:试试Weka的决策树类 * <code>J48Test</code> * */ import java.io.Fi ...
- HW2.16
import java.util.Scanner; public class Solution { public static void main(String[] args) { final int ...
- suse安装软件命令
zypper se xxxxx 是搜索软件包 zypper in xxxxx 跟apt-get install xxxx等价 zypper rm xxxx 删除 zypper up xxxx 更新软件
- redis缓存技术
初学redis缓存技术,如果文章写得不好还请谅解 应用环境:win7 实现环境:cmd,eclipse redis缓存技术的特点就在于高效,因为目前涉及的数据量逐渐增多,在对于数据的存储上面和sql以 ...
- iOS Xcode8的适配
1.打开应用后打印了很多的log信息 解决方法: Xcode8里边 Edit Scheme... -> Run -> Arguments, 在Environment Variables里边 ...
- CSS Grid layout布局
CSS Grid布局 (又名"网格"),是一个基于二维网格布局的系统,主要目的是改变我们基于网格设计的用户接口方式.你只需要定义一个容器元素并设置display:grid,使用gr ...
- Hibernate继承映射
在面向对象的程序领域中,类与类之间是有继承关系的,例如Java世界中只需要extends关键字就可以确定这两个类的父子关系,但是在关系数据库的世界中,表与表之间没有任何关键字可以明确指明这两张表的父子 ...
- JAVA中使用Redis
上节讲解了如何在centos上安装redis,点击查看.本节我们学习在java中使用redis.需要将jedis-*.jar添加到classpath(点击下载),如果使用连接池还需要commons-p ...
- Unity: How to build and debug external DLLs
法一:http://forum.unity3d.com/threads/161685-How-to-build-and-debug-external-DLLs http://docs.unity3d. ...