hdu 4055 && hdu 4489 动态规划
一开始我想的递推方向想得很复杂,看了别人的博客后才醍醐灌顶:

参照他的思路和代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod = ;
const int N = ; char s[N];
int dp[N][N], sum[N][N]; int main() {
while(~scanf("%s",s + )) {
memset(dp,,sizeof(dp));
// memset(sum,0,sizeof(sum));
dp[][] = sum[][] = ;
int n = strlen(s + );
for(int i = ; s[i]; ++i) {
for(int j = ; j <= i; ++j) {
if(s[i] == 'I' || s[i] == '?')
dp[i][j] = (dp[i][j] + sum[i - ][j - ]) % mod;
if(s[i] == 'D' || s[i] == '?')
dp[i][j] = (dp[i][j] + (sum[i - ][i - ] - sum[i - ][j - ] + mod) % mod) % mod;
sum[i][j] = (sum[i][j - ] + dp[i][j]) % mod;
}
}
printf("%d\n",sum[n + ][n + ]);
}
return ;
}
用类似的思路我独自 A 出了这道题,只是需要对 dp 数组和 sum 数组加多一维记录当前第 i 位是凹点还是凸点:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL; LL dp[][][], sum[][][]; inline void init(int n = ) {
dp[][][] = dp[][][] = ;
sum[][][] = sum[][][] = ;
for(int i = ; i <= n; ++i) {
for(int j = ; j <= i; ++j) {
dp[i][j][] += sum[i - ][j - ][];
dp[i][j][] += (sum[i - ][i - ][] - sum[i - ][j - ][]);
sum[i][j][] = sum[i][j - ][] + dp[i][j][];
sum[i][j][] = sum[i][j - ][] + dp[i][j][];
}
}
} int main() {
int t,num,n;
init();
scanf("%d",&t);
while(t--) {
scanf("%d %d",&num,&n);
printf("%d %I64d\n", num, n == ? : sum[n][n][] + sum[n][n][]);
}
return ;
}
空间是可以优化的,不过对于这样的数据范围没必要。
hdu 4055 && hdu 4489 动态规划的更多相关文章
- HDU 4055 The King’s Ups and Downs(DP计数)
题意: 国王的士兵有n个,每个人的身高都不同,国王要将他们排列,必须一高一矮间隔进行,即其中的一个人必须同时高于(或低于)左边和右边.问可能的排列数.例子有1千个,但是最多只算到20个士兵,并且20个 ...
- HDU - 2222,HDU - 2896,HDU - 3065,ZOJ - 3430 AC自动机求文本串和模式串信息(模板题)
最近正在学AC自动机,按照惯例需要刷一套kuangbin的AC自动机专题巩固 在网上看过很多模板,感觉kuangbin大神的模板最为简洁,于是就选择了用kuangbin大神的模板. AC自动机其实就是 ...
- hdu 4055 动态规划
#include<map> #include<set> #include<cmath> #include<queue> #include<cstd ...
- Number String(HDU 4055,动态规划递推,前缀和优化)
点击加号查看代码 #include<bits/stdc++.h>//前缀和优化版本,不易理解 using namespace std; #define ll long long ; ; l ...
- The King’s Ups and Downs(HDU 4489,动态规划递推,组合数,国王的游戏)
题意: 给一个数字n,让1到n的所有数都以波浪形排序,即任意两个相邻的数都是一高一低或者一低一高 比如:1324 4231,再比如4213就是错的,因为4高,2低,接下来1就应该比2高,但是它没有 ...
- hdu FatMouse's Speed 动态规划DP
动态规划的解决方法是找到动态转移方程. 题目地址:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=3§ionid ...
- HDU 2059 龟兔赛跑(动态规划)
龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 4055 Number String dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4055 Number String Time Limit: 10000/5000 MS (Java/O ...
- hdu 4055 Number String
Number String http://acm.hdu.edu.cn/showproblem.php?pid=4055 Time Limit: 10000/5000 MS (Java/Others) ...
随机推荐
- 【转】java_web开发入门
转载地址:http://www.cnblogs.com/xiaoqv/archive/2011/12/10/2283348.html 一.Tomcat服务器常见启动问题:(1).Java_home环境 ...
- Android 坐标与宽高研究getLeft() getTop() getRight()和getBottom()
把view看做一个矩形,分别表示的是一个view的左边,上边,右边,下边距离他的父组件的距离. getRight() =getLeft() + getWidth() getBottom()= getT ...
- poj3270 Cow Sorting
给定有序数组a[1...n]的一个置换a[σ(1)...σ(n)], 通过交换数组元素把置换后的数组恢复为有序, 定义进行一次交换的代价为两元素之和,试问此过程的最小总代价. 实际上一种置换即定义S ...
- Pearls
Pearls Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7980 Accepted: 3966 Description In ...
- 安装zeromq以及zeromq的python示例
下载ZeroMq: wget https://github.com/zeromq/zeromq4-1/releases/download/v4.1.5/zeromq-4.1.5.tar.gz 解压: ...
- js九九乘法表
<!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...
- UML中的用例(Use Case)概念分析及StarUML实例
在UML中use case似 乎最簡單的,用例建模的最主要功能就是用来表达系统的功能性需求或行为,依我的理解用例建模可分为用例图和用例描述.用例图由参与者(Actor).用例 (Use Case).系 ...
- 未完成的任务之:下载、安装、体验 Gentoo
Gentoo,伟大的Gentoo是Linux世界最年轻的发行版本,正因为年轻,所以能吸取在她之前的所有发行版本的优点,这也是Gentoo被称为最完美的Linux发行版本的原因之一. 如果你需要一个桌面 ...
- Shell脚本编程初体验
原文:http://linoxide.com/linux-shell-script/guide-start-learning-shell-scripting-scratch/ 作者: Petras L ...
- 高仿bootstrap的layout效果(一)
公司研发一个新的cms,为了减少以后的修改和尽可能大程度的满足客户对cms的灵活需求,我的经理安排我去做一个与bootstrap的layout差不多的效果,这叫什么,锻炼的时候来了,加油,这个急不得一 ...