题目链接:https://cn.vjudge.net/problem/HDU-4055

题意

给一个序列相邻元素各个上升下降情况('I'上升'D'下降'?'随便),问有几种满足的排列。

例:ID

答:2 (231和132)

思路

第一次看这题,思路是没得。

又是最后讲题才知道咋写。

直接给方程了:

dp[i][j]表示满足以j为结尾的,长度为i的排列方案数。

str[i]'I': dp[i][j]=sum(dp[i-1][k]) (1<=k<=j-1)

str[i]'D': dp[i][j]=sum(dp[i-1][k]) (j<=k<=i)

str[i]=='?': dp[i][j]=sum(dp[i-1][k]) (1<=k<=i)

这里的I一定是没问题,D为啥是个这?

可以想像D的意思是在一个序列末尾插入一个大小为j元素,

这样的话,前面所有大于等于j的元素应该被加一才能满足是一个排列。

那么'?'亦然。

提交过程

WA×2 注意取模,正数也得加模取模,因为可能溢出?
AC 注意边界dp[1][1]=1, 没用滚动数组2152ms
AC 滚动数组1591ms, 省去了时间上的指针操作和空间

代码

#include <cstdio>
#include <cstring>
const int maxn=1e3+20;
const long long mod=1000000007;
long long dp[maxn];
char str[maxn]; int main(void){
while (scanf("%s", str)==1){
int len=strlen(str);
memset(dp, 0, sizeof(dp));
// for (int i=1; i<=len; i++) dp[0][i]=1;
dp[1]=1; for (int i=1; i<=len; i++){
long long sum[maxn];
sum[0]=0;
for (int j=1; j<=i; j++) sum[j]=(sum[j-1]+dp[j])%mod; for (int j=1; j<=i+1; j++){
dp[j]=0;
if (str[i-1]!='I') dp[j]=(dp[j]+sum[i]-sum[j-1])%mod;
if (str[i-1]!='D') dp[j]=(dp[j]+sum[j-1]-sum[0])%mod;
}
} long long sum=0;
for (int i=1; i<=len+1; i++)
sum=(sum+dp[i])%mod;
printf("%lld\n", (sum+mod)%mod);
} return 0;
}
Time Memory Length Lang Submitted
1591ms 1224kB 865 G++ 2018-08-13 09:19:28

最新文章

  1. 【笔记】读取properties文件
  2. selenium总结篇,常见方法和页面元素的操作【转】
  3. C语言 线性表 双向链式结构 实现
  4. 字符串处理:ABAP中的正则表达式
  5. commonJS — 数字操作(for Number)
  6. tensorflow + pycharm安装即相关资料
  7. 纯JS画点、画线、画圆的方法
  8. AndroidManifest笔记
  9. guslterFS
  10. iOS UIKit:viewController之层次结构(1)
  11. web-请求无缓存
  12. centos上如何安装mysql
  13. java-web-dom4j解析XML-递归方式
  14. Python中括号的区别及用途
  15. sql中的for xml path() 实现字符串拼接
  16. 预览github项目的html文件新方法
  17. javascript面向对象编程(OOP)——汇总
  18. 深度解读Tomcat中的NIO模型(转载)
  19. 使用PHP操作ElasticSearch
  20. Hiero中versionscanner模块结构图

热门文章

  1. LeetCode 709. To Lower Case (转换成小写字母)
  2. 在GNU Linux中怎样得到一个进程当前的流量
  3. Datazen自己定义地图
  4. Git下的冲突解决【转】
  5. Netlink通信机制【转】
  6. TensorFlow alexnet在华为Mate10上运行方法
  7. element-ui table 页面加载时,动态渲染后台传过来的数据(springmvc)
  8. 个人微信二次开发API接口
  9. Educational Codeforces Round 24 题解
  10. Elasticsearch集群状态健康值处于red状态问题分析与解决(图文详解)