[hdu1023]递推
http://acm.hdu.edu.cn/showproblem.php?pid=1023
如果把栈里面的元素个数表示成状态,每一步(共2 * n步)的状态构成的状态序列的种数就是答案,令dp[i][j]表示第i步栈的状态为j的方案数,则有:
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1],+1、-1相当于进栈和出栈,需考虑边界条件,详见代码(答案太大,需用大数):
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <map>
#include <stack>
#include <string>
#include <ctime>
#include <queue>
#define mem0(a) memset(a, 0, sizeof(a))
#define mem(a, b) memset(a, b, sizeof(a))
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
#define eps 0.0000001
#define lowbit(x) ((x) & -(x))
#define memc(a, b) memcpy(a, b, sizeof(b))
#define x_x(a) ((a) * (a))
#define LL __int64
#define DB double
#define pi 3.14159265359
#define MD 10000007
#define INF (int)1e9
using namespace std;
struct BigNum{
#define maxlen 10
#define memc(a, b) memcpy(a, b, sizeof(b))
#define mem0(a) memset(a, 0, sizeof(a))
typedef __int64 Num[maxlen + ];
Num num;
char s[maxlen + ];
BigNum operator+(BigNum num2) {
BigNum ans;
mem0(ans.num);
for(int i = ; i <= maxlen; i++) {
ans.num[i] += num[i] + num2.num[i];
ans.num[i + ] += ans.num[i] / (int)1e9;
ans.num[i] %= (int)1e9;
}
return ans;
}
BigNum operator*(BigNum num2) {
BigNum ans;
mem0(ans.num);
for(int i = ; i <= maxlen; i++) {
for(int j = ; j <= maxlen; j++) {
if(i + j - <= maxlen) {
ans.num[i + j - ] += num[i] * num2.num[j];
ans.num[i + j] += ans.num[i + j - ] / (int)1e9;
ans.num[i + j - ] %= (int)1e9;
}
}
}
return ans;
}
void convert() {
int len = strlen(s), cnt = ;
for(int i = len - ; i >= ; i -= ) {
int p = , x = , t = ;
while(i - p >= && p < ) {
x += t * (s[i - p] - '');
p++;
t *= ;
}
num[++cnt] = x;
}
}
void inp() {
mem0(num);
scanf("%s", s);
convert();
}
void outp() {
int p = ;
for(int i = maxlen; i >= ; i--) {
if(num[i]) {
p = i;
break;
}
}
cout<< num[p];
while(--p) {
int a[] = {}, x = num[p];
for(int i = ; i < ; i++) {
a[i] = x % ;
x /= ;
}
for(int i = ; i >= ; i--) {
printf("%d", a[i]);
}
}
}
BigNum(char str[]) {
strcpy(s, str);
mem0(num);
convert();
}
BigNum(){}
};
BigNum f[][];
int main()
{
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
int n;
while(~scanf("%d", &n)) {
mem0(f);
f[][] = BigNum("");
for(int i = ; i <= * n; i++) {
for(int j = ; j <= n; j++) {
f[i][j] = f[i - ][j + ];
if(j) f[i][j] = f[i][j] + f[i - ][j - ];
}
}
f[ * n][].outp();
cout<< endl;
}
return ;
}
[hdu1023]递推的更多相关文章
- 【BZOJ-2476】战场的数目 矩阵乘法 + 递推
2476: 战场的数目 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 58 Solved: 38[Submit][Status][Discuss] D ...
- 从一道NOI练习题说递推和递归
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可 ...
- Flags-Ural1225简单递推
Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...
- 利用Cayley-Hamilton theorem 优化矩阵线性递推
平时有关线性递推的题,很多都可以利用矩阵乘法来解决. 时间复杂度一般是O(K3logn)因此对矩阵的规模限制比较大. 下面介绍一种利用利用Cayley-Hamilton theorem加速矩阵乘法的方 ...
- 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】
还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...
- 简单递推 HDU-2108
要成为一个ACMer,就是要不断学习,不断刷题...最近写了一些递推,发现递推规律还是挺明显的,最简单的斐波那契函数(爬楼梯问题),这个大家应该都会,看一点稍微进阶了一点的,不是简单的v[i] = v ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式
矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b * A B = a*A+b*C a*c+b*D c d ...
- openjudge1768 最大子矩阵[二维前缀和or递推|DP]
总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...
随机推荐
- springboot前后端分离跨域
@Configurationpublic class CrossConfig implements WebMvcConfigurer { @Override public void addCorsMa ...
- 用 Python 黄图批量鉴别审核
前言 最近写了一款微信小程序需要用到图片审核,人工审核是不可能的人工审核的太费精力了,所以我就写了一个多线程批量识别脚本来处理,主要是调用百度AI的接口,这里我是付费了也不贵审核一条1分钱不到,再说我 ...
- ThreadLocal 是什么鬼?用法、源码一锅端
ThreadLocal 是一个老生常谈的问题,在源码学习以及实际项目研发中,往往都能见到它的踪影,用途比较广泛,所以有必要深入一番. 敢问,ThreadLocal 都用到了哪里?有没有运用它去解决过业 ...
- [Abp vNext 入坑分享] - 前言
一·背景 Abp vnext是 ABP 框架作者所发起一个完全基于 ASP .NET Core框架,截至2020年4月份已经升级到2.5.0版本,根据经验2.0版本以后可以放心的使用在生产环境.类似a ...
- 微信网页授权报code been used, hints: [ req_id: XYv1Ha07042046 ]
先贴上代码: public function index() { $code = input('get.code'); $tool = new Wxtool(); if (empty($code)) ...
- foreach里的按引用传值问题
1.foreach($arr as $k=>&$v){ } 这样循环时候最后一个结果前边会有&,出现输出不了的情况,这时候只需要加一个unset($v),加在循环里和外均可. 2 ...
- 串口字符串-HEX格式
串口字符串-HEX格式 C++SerialSerialPortHEX 介绍 串口通信过程中 通常涉及一个数据的模拟过程以及数据发送过程, 一般来说, 我们会发送一串指令给下位机 68 05 00 84 ...
- Spring5参考指南:IOC容器
文章目录 为什么使用Spring5 什么是IOC容器 配置元数据 实例化容器 XML嵌套 groovy bean定义DSL 使用容器 最近在翻译Spring Framework Documentati ...
- linux服务器(CentOS)一键安装express框架
express框架需要nodejs环境支持,没有安装node.js环境的同学可以参照下面这篇博客 linux服务器安装配置Node.js 好了,言归正传.先使用xshell或者其它软件连接我们的服务器 ...
- 强行重装IE6
一句指令解决了郁闷一天的问题: 今天碰到问题如下: 在不知是不是人品问题的情况下(其实基本是优化大师嫌疑最大)发现在第三方引用的软件中不能打开IE了: 具体症状: 在QQ中点击别人的链接,没反应: 在 ...