hdu 4055:

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

  参照他的思路和代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int mod = 1000000007;
 6 const int N = 1002;
 7
 8 char s[N];
 9 int dp[N][N], sum[N][N];
10
11 int main() {
12     while(~scanf("%s",s + 2)) {
13         memset(dp,0,sizeof(dp));
14 //        memset(sum,0,sizeof(sum));
15         dp[1][1] = sum[1][1] = 1;
16         int n = strlen(s + 2);
17         for(int i = 2; s[i]; ++i) {
18             for(int j = 1; j <= i; ++j) {
19                 if(s[i] == 'I' || s[i] == '?')
20                     dp[i][j] = (dp[i][j] + sum[i - 1][j - 1]) % mod;
21                 if(s[i] == 'D' || s[i] == '?')
22                     dp[i][j] = (dp[i][j] + (sum[i - 1][i - 1] - sum[i - 1][j - 1] + mod) % mod) % mod;
23                 sum[i][j] = (sum[i][j - 1] + dp[i][j]) % mod;
24             }
25         }
26         printf("%d\n",sum[n + 1][n + 1]);
27     }
28     return 0;
29 }

View Code

  hdu 4489:

  用类似的思路我独自 A 出了这道题,只是需要对 dp 数组和 sum 数组加多一维记录当前第 i 位是凹点还是凸点:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 typedef long long LL;
 6
 7 LL dp[22][22][2], sum[22][22][2];
 8
 9 inline void init(int n = 20) {
10     dp[1][1][0] = dp[1][1][0] = 1;
11     sum[1][1][0] = sum[1][1][1] = 1;
12     for(int i = 2; i <= n; ++i) {
13         for(int j = 1; j <= i; ++j) {
14             dp[i][j][1] += sum[i - 1][j - 1][0];
15             dp[i][j][0] += (sum[i - 1][i - 1][1] - sum[i - 1][j - 1][1]);
16             sum[i][j][0] = sum[i][j - 1][0] + dp[i][j][0];
17             sum[i][j][1] = sum[i][j - 1][1] + dp[i][j][1];
18         }
19     }
20 }
21
22 int main() {
23     int t,num,n;
24     init();
25     scanf("%d",&t);
26     while(t--) {
27         scanf("%d %d",&num,&n);
28         printf("%d %I64d\n", num, n == 1 ? 1: sum[n][n][0] + sum[n][n][1]);
29     }
30     return 0;
31 }

  空间是可以优化的,不过对于这样的数据范围没必要。

转载于:https://www.cnblogs.com/Newdawn/p/4730937.html

hdu 4055 hdu 4489 动态规划相关推荐

  1. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】带权二分图匹配 KM算法

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]最小费用最大流 In the kingdom of Henryy, there are N (2 <= N <= ...

  2. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]带权二分图匹配 KM算法 In the kingdom of Henryy, there are N (2 <= N & ...

  3. 母函数+例题(hdu 2079+hdu 2082)

    母函数+例题(hdu 2079+hdu 2082) 虽然ACM的确有点力不从心,但是还是贵在坚持,继续啃啃算法..... 昨天一个下午学了学母函数,离散数学+幂级数,只能说nb- 看了半天的原理,结果 ...

  4. hdu 1421 搬寝室 动态规划

    http://acm.hdu.edu.cn/showproblem.php?pid=1421 d[n][m] : 在前n个物品里选m对的最小疲劳 当地n件不选时 d[n][m]=d[n-1][m] 当 ...

  5. HDU 1159 Common Subsequence 动态规划

    2017-08-06 15:41:04 writer:pprp 刚开始学dp,集训的讲的很难,但是还是得自己看,从简单到难,慢慢来(如果哪里有错误欢迎各位大佬指正) 题意如下: 给两个字符串,找到其中 ...

  6. A Walk Through the Forest HDU - 1142(dijkstra+动态规划)

    题目大意: 给你一个图,找最短路.但是有个非一般的的条件:如果a,b之间有路, 且你选择要走这条路,那么必须保证a到终点的所有路都小于b到终点的 一条路.问满足这样的路径条数 有多少... 解题思路 ...

  7. 【HDU - 4055】Number String(dp,思维)

    题干: The signature of a permutation is a string that is computed as follows: for each pair of consecu ...

  8. HDU 5586 Sum (预处理 + 动态规划)

    题目链接:传送门 题意:给你n个数字,然后你可以对这n个数组的任意一个子区间进行一个操作,\(f(x)=(1890x+143)mod10007\),或者不进行操作,问你怎样操作能使得加和最大解题思路: ...

  9. hdu 1251+hdu 1671(字典树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 一开始我是直接用STL做的,唉...没有经验那...orz...然后毫无疑问地超时了... 看别 ...

最新文章

  1. kudu接受kafka消息_Kafka 在车好多
  2. 互联网高薪的原因、现状、未来,还值不值得进来?
  3. SAP进阶:再论SAP权限
  4. reactjs组件的生命周期:创建时和更新时
  5. php-fpm 找不到 php-cgi.sock 怎么办
  6. IT人员加班处于恐惧之中
  7. Chromium Android开发的Eclipse配置
  8. Quarkus的其他(非标准)CDI功能
  9. 线性表的常见操作实现
  10. wordpress数据表说明
  11. 使用继电器制作振荡器
  12. 在Windows上使用Mingw-W64进行C/C++开发(gcc工具链)
  13. 跨域的同时设置headers信息
  14. 用基带等效的方式仿真8-DPSK载波调制信号在AWGN信道下的误码率和误比特率,并与理论值相比较。
  15. matlab解非齐次矩阵方程组,matlab-线性代数 非齐次方程组 基础解系和通解
  16. 万能码,你的启明星(安全扫码专业委员会)
  17. “燕云十六将”之Jason郝钰(12)
  18. 解决checkbox选中但是不显示打钩的问题
  19. 18.12.1 Nuist_ACM集训队数论专场ABC题解
  20. 获取WiFi MAC地址总结

热门文章

  1. mysql-5.7在CentOS-7下的rpm安装
  2. NIO-java.nio.ByteBuffer中flip、rewind、clear方法的区别
  3. npm install 卡住的时候的处理
  4. 【转】地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02) 的转换算法 C语言
  5. MySQL客户端mysql常用命令
  6. Linux 多网卡bond
  7. 浏览器通知,可配合socket
  8. MyBatis由浅入深学习总结之二:MyBatis解决Java实体类和数据库表字段不一致方法总结
  9. 软件工程软件产品质量要求与评价_软件工程定义
  10. 利用日志传送来实现数据库的可用性