点击加号查看代码
#include<bits/stdc++.h>//前缀和优化版本,不易理解
using namespace std;
#define ll long long
const ll maxn=;
const ll mod=;
ll sum[maxn][maxn];
ll dp[maxn][maxn];
char str[maxn]; int main()
{
str[]='*';
str[]='*';
scanf("%s",str+);
ll len=strlen(str)-;
sum[][]=;
dp[][]=;
for(ll i=;i<=len;i++)
for(ll j=;j<=i;j++)
{
if(str[i]=='I'||str[i]=='?')
{
dp[i][j]=(dp[i][j]+sum[i-][j-])%mod;
}
if(str[i]=='D'||str[i]=='?')
{
ll temp=((sum[i-][i-]-sum[i-][j-])%mod+mod)%mod;
dp[i][j]=(dp[i][j]+temp)%mod;
}
sum[i][j]=(dp[i][j]+sum[i][j-])%mod;
}
cout<<sum[len][len]<<endl;
}

前缀和优化版本,不易理解

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll maxn=;
const ll mod=;
ll dp[maxn][maxn];
char str[maxn]; int main()
{
str[]='*';
str[]='*';
scanf("%s",str+);
ll len=strlen(str)-;
dp[][]=;
for(ll i=;i<=len;i++)
for(ll j=;j<=i;j++)
{
if(str[i]=='I')
{
for(ll k=;k<j;k++)
{
dp[i][j]+=dp[i-][k]%mod;
}
}
else if(str[i]=='D')
{
for(ll k=j;k<i;k++)
{
dp[i][j]+=dp[i-][k]%mod;
}
}
else
{
for(ll k=;k<=i;k++)
{
dp[i][j]+=dp[i-][k]%mod;
}
}
}
ll ans=;
for(ll i=;i<=len;i++)
{
ans+=dp[len][i]%mod;
}
cout<<ans<<endl;
// for(int i=1;i<=len;i++)//测验每一个dp是否符合预期
// for(int j=1;j<=len;j++)
// {
// printf("%d ",dp[i][j]);
// if(j==len)
// printf("\n");
// }
}

超时版本,但是容易理解

思路用图表示

首先感谢糖栗子的博文http://www.cnblogs.com/tanglizi/p/9471078.html以及他的热心帮助

下面上图:

Number String(HDU 4055,动态规划递推,前缀和优化)的更多相关文章

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

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

  2. 最长上升子序列(动态规划递推,LIS)

    1759:最长上升子序列 题目: 总时间限制: 2000ms 内存限制: 65536kB 描述 一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的 ...

  3. 最大子段和(洛谷P1115,动态规划递推)

    洛谷题目链接 题目赋值出来格式有问题,所以我就只放题目链接了 下面为ac代码 #include<bits/stdc++.h> #define ll long long using name ...

  4. HDU 4747 Mex 递推/线段树

    题目链接: acm.hdu.edu.cn/showproblem.php?pid=4747 Mex Time Limit: 15000/5000 MS (Java/Others)Memory Limi ...

  5. SPOJ:Fibonacci Polynomial(矩阵递推&前缀和)

    Problem description. The Fibonacci numbers defined as f(n) = f(n-1) + f(n-2) where f0 = 0 and f1 = 1 ...

  6. HDU - 2604 Queuing(递推式+矩阵快速幂)

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  7. hdu 1723 DP/递推

    题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式. 这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacc ...

  8. [hdu 2604] Queuing 递推 矩阵快速幂

    Problem Description Queues and Priority Queues are data structures which are known to most computer ...

  9. P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)

    题目链接:点击进入 题目分析: 简单的组合背包模板题,但是递推的同时要刷新这种情况使用了哪些物品 ac代码: #include<bits/stdc++.h> using namespace ...

随机推荐

  1. linux redis tmp redis 安装

    Redis https://redis.io/download yum install make gcc gcc-c++ openssl-devel zlib-devel -y; wget tar - ...

  2. js二维数组定义和初始化的三种方法总结

    js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...

  3. 并不对劲的bjwc d4t1

    先膜一波宽神Orz%%%%% 拿到这题的第一反应就是:暴力啊!感觉神奇的钟点并没有什么性质,可能卡常能过吧……所以就写了一个O(22^3*59^3)的暴力.本来想打表,但是发现代码长度有限制,写不下. ...

  4. ubuntu16.04 查看CPU是几核

    ubuntu 16.04下查看机器是cpu是几核的 几个cpu more /proc/cpuinfo |grep "physical id"|uniq|wc -l 每个cpu是几核 ...

  5. astgo经常死机变慢?试试mysql数据碎片整理吧

    使用SSH之类的工具或navicat链接数据库后(注意:是链接数据库后哦,不是直接SSH后就弄,这样提示命令错误的) 执行下面命令(目的是对ASTGO的数据库内除话单之外的所有表进行数据碎片整理,特别 ...

  6. div标签的闭合检查

    什么叫DIV标签有没有闭合呢?有<div>开头就应该有</div>来结尾闭合了.有时候写代码写 了<div>,忘记</div>结尾,谓之没有闭合也. 如 ...

  7. 几个SQL小知识(转)

    原文地址:http://www.cnblogs.com/wuguanglei/p/4205976.html 写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码 ...

  8. POJ 2452 Sticks Problem (暴力或者rmq+二分)

    题意:给你一组数a[n],求满足a[i] < a[k] < a[j] (i <= k <= j)的最大的 j - i . 析:在比赛时,我是暴力做的,虽然错了好多次,后来说理解 ...

  9. [SDOI2010]外星千足虫(高斯消元)

    高斯消元裸题... 方法一:暴力,O(2^n)20分 方法二:直接Gauss,加点玄学技巧搞得好的话70分 方法三:使用bitset优化,复杂度:$O(\frac{n^3}{ω})$ 不会的同学看一下 ...

  10. [SDOI2009]学校食堂

    题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...