hdoj-4055

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. using namespace std;
  6. const int mod=;
  7. const int N=+;
  8. long long sum[N][N];
  9. char str[N];
  10. int main ()
  11. {
  12. // 含义 dp[i][j] 前i个字母 以数字j结尾的排列方式 比如("II")-dp[2][3] 表示 “123”
  13. //递推公式 如果str="I" dp[i][j]=dp[i-1][1]+dp[i-1][2]+...+dp[i-1][j-1];
  14. //str="D" dp[i][j]=dp[i-1][j]+dp[i][j+1]+...+dp[i][i+1]
  15. // 解释比如前i-1个排列 {3 1 4 2 5} 可以加一个 3 前面所有比3大的数加1(这样不会改变前面的增长顺序)
  16. // 变成{4,1,5,2,6,3}
  17. //sum[i][j]=dp[i][1]+dp[i][2]+...dp[i][j];
  18. while (~scanf (" %s",str+)) {
  19. int n=strlen(str+);
  20. sum[][]=;
  21. for (int i=;i<=n;i++) {
  22. for (int j=;j<=i+;j++) {//i+1 因为i个字母表示i+1个数字
  23. sum[i][j]=sum[i][j-];
  24. if (str[i]!='D')
  25. sum[i][j]+=sum[i-][j-];
  26. if (str[i]!='I')
  27. sum[i][j]+=sum[i-][i]-sum[i-][j-]+mod;
  28. sum[i][j]%=mod;
  29. }
  30. }
  31. printf ("%lld\n",sum[n][n+]);
  32. }
  33. return ;
  34. }

hdoj-4489

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. typedef long long LL;
  6. LL dp[][];
  7. LL f (int n,int m) { // f: C(n,m)
  8. LL ans=;
  9. if (m==) return ;
  10. for (int i=n-m+;i<=n;i++)
  11. ans*=i;
  12. for (int i=;i<=m;i++)
  13. ans/=i;
  14. return ans;
  15. }
  16. int main ()
  17. {
  18. dp[][]=dp[][]=;
  19. dp[][]=dp[][]=;// 在前i个数排好基础下排第j个
  20. // dp[i][0] 以下降方式结尾 dp[i][1]以上升方式开始
  21. // 第i个数排在下降方式结尾子序列和以上升方式开始子序列之间
  22. for (int i=;i<=;i++) {
  23. LL tmp=;
  24. for (int j=;j<i;j++)
  25. tmp+=dp[j][]*dp[i--j][]*f(i-,j);
  26. dp[i][]=dp[i][]=tmp/;
  27. }
  28. int T;
  29. scanf ("%d",&T);
  30. while (T--) {
  31. int x,n;
  32. scanf ("%d %d",&x,&n);
  33. if (n==) printf ("%d 1\n",x);// 注意这个特殊情况
  34. else printf ("%d %lld\n",x,*dp[n][]);
  35. }
  36. return ;
  37. }

两道不错的递推dp的更多相关文章

  1. 递推DP URAL 1017 Staircases

    题目传送门 /* 题意:给n块砖头,问能组成多少个楼梯,楼梯至少两层,且每层至少一块砖头,层与层之间数目不能相等! 递推DP:dp[i][j] 表示总共i块砖头,最后一列的砖头数是j块的方案数 状态转 ...

  2. 递推DP UVA 607 Scheduling Lectures

    题目传送门 题意:教授给学生上课,有n个主题,每个主题有ti时间,上课有两个限制:1. 每个主题只能在一节课内讲完,不能分开在多节课:2. 必须按主题顺序讲,不能打乱.一节课L时间,如果提前下课了,按 ...

  3. poj 2229 【完全背包dp】【递推dp】

    poj 2229 Sumsets Time Limit: 2000MS   Memory Limit: 200000K Total Submissions: 21281   Accepted: 828 ...

  4. Code Force 429B Working out【递推dp】

    Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the ...

  5. 递推DP URAL 1167 Bicolored Horses

    题目传送门 题意:k个马棚,n条马,黑马1, 白马0,每个马棚unhappy指数:黑马数*白马数,问最小的unhappy值是多少分析:dp[i][j] 表示第i个马棚放j只马的最小unhappy值,状 ...

  6. 递推DP URAL 1260 Nudnik Photographer

    题目传送门 /* 递推DP: dp[i] 表示放i的方案数,最后累加前n-2的数字的方案数 */ #include <cstdio> #include <algorithm> ...

  7. 递推DP URAL 1353 Milliard Vasya's Function

    题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...

  8. 递推DP URAL 1119 Metro

    题目传送门 /* 题意:已知起点(1,1),终点(n,m):从一个点水平或垂直走到相邻的点距离+1,还有k个抄近道的对角线+sqrt (2.0): 递推DP:仿照JayYe,处理的很巧妙,学习:) 好 ...

  9. 递推DP 赛码 1005 Game

    题目传送门 /* 递推DP:官方题解 令Fi,j代表剩下i个人时,若BrotherK的位置是1,那么位置为j的人是否可能获胜 转移的时候可以枚举当前轮指定的数是什么,那么就可以计算出当前位置j的人在剩 ...

随机推荐

  1. burpsuite拦截https数据包(Firefox)

    1.配置浏览器对http/https都使用burpsuite代理 http和https是分开的,对http使用了代理并不代表对https也使用了代理,要配置浏览器让其对https也使用同样的代理. 当 ...

  2. SpringMVC中JSP页面显示为源码

    @RequestMapping(value = "login") public ModelAndView login(ModelAndView mav) throws Except ...

  3. get url img

    selenium     1● 了解selenium 这个是做 web页面测试,模拟用户测试   =====> pip install selenium 安装     2● django 用于接 ...

  4. Linux 控制CPU使用率

    曾经看过<编程之美>上提到说使 CPU的使用率固定在百分之多少.然后这次刚好要用到这个东西,下面是一个简单的实现.基于多线程: Linux 版本: #include <iostrea ...

  5. 逆袭之旅DAY17.东软实训.Oracle.存储过程

    2018-07-13 09:08:36

  6. C++解析六-继承

    面向对象程序设计中最重要的一个概念是继承.继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易.这样做,也达到了重用代码功能和提高执行时间的效果.当创建一个类时,您不需要重新编 ...

  7. 服务消费和负载(Feign)

    Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口 ...

  8. 深入理解java虚拟机---虚拟机工具VisualVM(十九)

    性能分析神器VisualVM 9602 VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优.这些功能包括生成 ...

  9. 深入理解java虚拟机---lanmbda表达式简介(三)

    1.lanmbda表达式使用  lanbmda表达式的作用: A: 取代内部类 B;增加对集合的操作,从而增强其性能

  10. SQL-1 选取表中某一属性最大值的所有信息 查找最晚入职员工的所有信息

    题目描述 查找最晚入职员工的所有信息CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`fi ...