点击加号查看代码
  1. #include<bits/stdc++.h>//前缀和优化版本,不易理解
  2. using namespace std;
  3. #define ll long long
  4. const ll maxn=;
  5. const ll mod=;
  6. ll sum[maxn][maxn];
  7. ll dp[maxn][maxn];
  8. char str[maxn];
  9.  
  10. int main()
  11. {
  12. str[]='*';
  13. str[]='*';
  14. scanf("%s",str+);
  15. ll len=strlen(str)-;
  16. sum[][]=;
  17. dp[][]=;
  18. for(ll i=;i<=len;i++)
  19. for(ll j=;j<=i;j++)
  20. {
  21. if(str[i]=='I'||str[i]=='?')
  22. {
  23. dp[i][j]=(dp[i][j]+sum[i-][j-])%mod;
  24. }
  25. if(str[i]=='D'||str[i]=='?')
  26. {
  27. ll temp=((sum[i-][i-]-sum[i-][j-])%mod+mod)%mod;
  28. dp[i][j]=(dp[i][j]+temp)%mod;
  29. }
  30. sum[i][j]=(dp[i][j]+sum[i][j-])%mod;
  31. }
  32. cout<<sum[len][len]<<endl;
  33. }

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

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. const ll maxn=;
  5. const ll mod=;
  6. ll dp[maxn][maxn];
  7. char str[maxn];
  8.  
  9. int main()
  10. {
  11. str[]='*';
  12. str[]='*';
  13. scanf("%s",str+);
  14. ll len=strlen(str)-;
  15. dp[][]=;
  16. for(ll i=;i<=len;i++)
  17. for(ll j=;j<=i;j++)
  18. {
  19. if(str[i]=='I')
  20. {
  21. for(ll k=;k<j;k++)
  22. {
  23. dp[i][j]+=dp[i-][k]%mod;
  24. }
  25. }
  26. else if(str[i]=='D')
  27. {
  28. for(ll k=j;k<i;k++)
  29. {
  30. dp[i][j]+=dp[i-][k]%mod;
  31. }
  32. }
  33. else
  34. {
  35. for(ll k=;k<=i;k++)
  36. {
  37. dp[i][j]+=dp[i-][k]%mod;
  38. }
  39. }
  40. }
  41. ll ans=;
  42. for(ll i=;i<=len;i++)
  43. {
  44. ans+=dp[len][i]%mod;
  45. }
  46. cout<<ans<<endl;
  47. // for(int i=1;i<=len;i++)//测验每一个dp是否符合预期
  48. // for(int j=1;j<=len;j++)
  49. // {
  50. // printf("%d ",dp[i][j]);
  51. // if(j==len)
  52. // printf("\n");
  53. // }
  54. }

超时版本,但是容易理解

思路用图表示

首先感谢糖栗子的博文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. 稀疏表达是要求信号在该模型下的sparse code,只有少数的non-zero elements

    为什么sparse representation比起其它成分分析方法(DFT,Wavelet)能得到更好的效果? - 知乎  https://www.zhihu.com/question/241241 ...

  2. android:模拟水波效果的自己定义View

    Github地址:https://github.com/nuptboyzhb/WaterWaveView 欢迎Fork.欢迎Star 1.先看效果 watermark/2/text/aHR0cDovL ...

  3. PHP MySQL mysql.sock的问题

    SQLSTATE[HY000] [2002] No such file or directory 原因是找不到mysql.sock这个文件..一般出现的症状就是能用ip连接mysql.但不能使用loc ...

  4. java jmenu的替代方案

    本来想实现一个类似jmenu的窗口,但是发现找了半天也没从L&F中找到实现menu的消失的头绪,最后还是使用了替代方案 使用JDialog来模拟一个menu的窗口,设置 setModel(fa ...

  5. 通过绑定ip地址可以暂时解决抢占ip问题

    以前设置的路由器密码都忘记了 admin重复,在工作上遇到了 一个去除str左右两边的空格换行符回车等 trim

  6. python-----使用requirements.txt批量安装包

    首先写一个 requirements.txt,格式如图: 然后使用命令行,到 requirements.txt 所在的目录下,执行命令: pip install -r requirements.txt ...

  7. DNS域名记录

    DNS域名记录 DNS数据库 在DNS的解析过程中用到域名的解析资源的记录,这个解析记录在DNS当中称为DNS数据库. 这个数据库又分为正解和反解,正解就是从主机名到ip的过程,反解就是从ip反响解析 ...

  8. 每天一个 linux命令(35):ln 命令(转载)

    转载:http://www.cnblogs.com/peida/archive/2012/12/11/2812294.html ln是linux中又一个非常重要命令,它的功能是为 某一个文件在另外一个 ...

  9. jquery input 赋值和取值

    记录一下: 在写一个input赋值,二话不说就直接利用了$('#xx').val()来进行取值和赋值,取值ok,赋值后利用alert显示正确,但是在html上并没有正确的显示出来,后来改为使用如下代码 ...

  10. Hibernate的表之间的关系

    表:A.B 一对多关系:A中的一个字段的记录(主键)引用B中的多个记录(外键) 多对一关系:A中的一个字段的记录(外键)引用B中的一个记录(主键) 一对一关系:A.B两个表的关联字段都是主键 多对多关 ...