hdu 4055

  一开始我想的递推方向想得很复杂,看了别人的博客后才醍醐灌顶:

  参照他的思路和代码:

 #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 ;
}

  hdu 4489

  用类似的思路我独自 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 动态规划的更多相关文章

  1. HDU 4055 The King’s Ups and Downs(DP计数)

    题意: 国王的士兵有n个,每个人的身高都不同,国王要将他们排列,必须一高一矮间隔进行,即其中的一个人必须同时高于(或低于)左边和右边.问可能的排列数.例子有1千个,但是最多只算到20个士兵,并且20个 ...

  2. HDU - 2222,HDU - 2896,HDU - 3065,ZOJ - 3430 AC自动机求文本串和模式串信息(模板题)

    最近正在学AC自动机,按照惯例需要刷一套kuangbin的AC自动机专题巩固 在网上看过很多模板,感觉kuangbin大神的模板最为简洁,于是就选择了用kuangbin大神的模板. AC自动机其实就是 ...

  3. hdu 4055 动态规划

    #include<map> #include<set> #include<cmath> #include<queue> #include<cstd ...

  4. Number String(HDU 4055,动态规划递推,前缀和优化)

    点击加号查看代码 #include<bits/stdc++.h>//前缀和优化版本,不易理解 using namespace std; #define ll long long ; ; l ...

  5. The King’s Ups and Downs(HDU 4489,动态规划递推,组合数,国王的游戏)

    题意: 给一个数字n,让1到n的所有数都以波浪形排序,即任意两个相邻的数都是一高一低或者一低一高 比如:1324   4231,再比如4213就是错的,因为4高,2低,接下来1就应该比2高,但是它没有 ...

  6. hdu FatMouse's Speed 动态规划DP

    动态规划的解决方法是找到动态转移方程. 题目地址:http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=3&sectionid ...

  7. HDU 2059 龟兔赛跑(动态规划)

    龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. HDU 4055 Number String dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4055 Number String Time Limit: 10000/5000 MS (Java/O ...

  9. hdu 4055 Number String

    Number String http://acm.hdu.edu.cn/showproblem.php?pid=4055 Time Limit: 10000/5000 MS (Java/Others) ...

随机推荐

  1. C# 添加.DLL 出错的解决方法

    解决方法:    1.     注册组件:       运行--cmd--regsvr32 dll的绝对路径名(例如: regsvr32  C:\bin\EFGateWayOfERP.dll) 如果注 ...

  2. Paths on a Grid(简单组合数学)

    Paths on a Grid Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 23008 Accepted: 5683 Desc ...

  3. python中string.casefold和string.lower区别

    string.casefold和string.lower 区别 python 3.3 引入了string.casefold 方法,其效果和 string.lower 非常类似,都可以把字符串变成小写, ...

  4. Python学习笔记-Day3-set集合操作

    set集合,是一个无序且不重复的元素集合.定义方式类似字典使用{}创建 目前我们学过的数据类型: 1.字符串(str),2.整型(int),3.浮点型(float),4,列表(list) 5.元组(t ...

  5. c++中函数empty()怎么使用

    string s = "";if (s.empty()){ cout << "字符串为空..";}else{ cout << " ...

  6. MUI 页面传值 webview

    我们假设a.html 和b.html a.html 页面代码 <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  7. 【Thread】多线程的异常处理?

    线程中处理异常是个头疼的问题,在异步的代码中,如何将异常捕获. 捕获异常后,将异常反馈给开发者,或用户.一般来说,反馈给开发者,多数方式在是日志中打印异常日志:而反馈给用户,多数是在界面上友好提示(比 ...

  8. C++ UTF8 UrlEncode(宽字符)(转载)

    转载:http://www.cnblogs.com/newcj/p/3645749.html #include "UrlEncode.h" #include <string& ...

  9. Linux下新的网络管理工具ip替代ifconfig零压力

    如果你使用 Linux 足够久,那么你自然知道一些工具的来与去.2009年 Debian 开发者邮件列表宣布放弃使用缺乏维护的 net-tools 工具包正是如此.到今天 net-tools 仍然被部 ...

  10. 只用css来美化的上传表单按钮(抄的迅雷的)

    <!DOCTYPE html><html><head><meta charset="utf-8" /><title>文件 ...