HDU4055:Number String(DP)
来源:互联网 发布:泽宇网络 编辑:程序博客网 时间:2024/04/29 05:51
reference:http://blog.csdn.net/jayye1994/article/details/12361481
Number String
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1945 Accepted Submission(s): 938
Problem Description
The signature of a permutation is a string that is computed as follows: for each pair of consecutive elements of the permutation, write down the letter 'I' (increasing) if the second element is greater than the first one, otherwise write down the letter 'D' (decreasing). For example, the signature of the permutation {3,1,2,7,4,6,5} is "DIIDID".
Your task is as follows: You are given a string describing the signature of many possible permutations, find out how many permutations satisfy this signature.
Note: For any positive integer n, a permutation of n elements is a sequence of length n that contains each of the integers 1 through n exactly once.
Your task is as follows: You are given a string describing the signature of many possible permutations, find out how many permutations satisfy this signature.
Note: For any positive integer n, a permutation of n elements is a sequence of length n that contains each of the integers 1 through n exactly once.
Input
Each test case consists of a string of 1 to 1000 characters long, containing only the letters 'I', 'D' or '?', representing a permutation signature.
Each test case occupies exactly one single line, without leading or trailing spaces.
Proceed to the end of file. The '?' in these strings can be either 'I' or 'D'.
Each test case occupies exactly one single line, without leading or trailing spaces.
Proceed to the end of file. The '?' in these strings can be either 'I' or 'D'.
Output
For each test case, print the number of permutations satisfying the signature on a single line. In case the result is too large, print the remainder modulo 1000000007.
Sample Input
IIIDDIDD?D??
Sample Output
122136HintPermutation {1,2,3} has signature "II".Permutations {1,3,2} and {2,3,1} have signature "ID".Permutations {3,1,2} and {2,1,3} have signature "DI".Permutation {3,2,1} has signature "DD"."?D" can be either "ID" or "DD"."??" gives all possible permutations of length 3.
Author
HONG, Qize
Source
2011 Asia Dalian Regional Contest
题意:略。思路:有技巧的dp,dp[i][j]表示处理到第i位数,以j结尾的方案数,如果s[i]为'I',dp[i][j] = dp[i-1][j-1] + dp[i-1][j-2] + ... dp[i-1][1]。如果s[i]为'D',dp[i][j] = dp[i-1][j+1] +dp[i-1][j+2] +...+dp[i-1][i]。
如果j在前面已经出现过了,那么可以理解为将前面>=j的数都加1,下面代码用前缀和表示。
# include <iostream># include <cstdio># include <cstring># define ll long long# define MOD 1000000007using namespace std;ll sum[1003][1003];int main(){ char s[1003]; while(~scanf("%s",s)) { sum[0][1] = 1; int len = strlen(s); for(int i=1; i<=len; ++i) { for(int j=1; j<=i+1; ++j) { sum[i][j] = sum[i][j-1]; if(s[i-1] != 'D') sum[i][j] += sum[i-1][j-1]; if(s[i-1] != 'I') sum[i][j] += sum[i-1][i] - sum[i-1][j-1] + MOD; sum[i][j] %= MOD; } } printf("%lld\n",sum[len][len+1]); } return 0;}
0 0
- HDU4055 Number String(DP)
- HDU4055 - number string(DP)
- HDU4055:Number String(DP)
- HDU4055 Number String(计数dp)
- hdu4055 Number String
- HDU4055 (dp计数)
- hdu4055 dp
- hdu4055 dp
- hdu4055(dp)
- ZOJ 3543 Number String(dp)
- HDU 4055 Number String(dp)
- ZOJ 3543 - Number String(dp)
- HDOJ 题目4055 Number String(DP)
- HDU 4055 Number String(计数dp)
- [DP]HDU 4055 Number String
- zoj 3543 Number String(DP)
- HDU 4055 Number String dp
- Zoj 3543 Number String(dp)
- JCVideoPlayer朋友圈动态多item视频播放以及使用compile 'fm.jiecao:jiecaovideoplayer:5.5.2'版本在项目中出现的各种异常处理
- CUDA 编程 之 同步函数与访存栅栏
- java并发编程实践_06任务执行
- windows控制台显示闪烁字符
- 初学“邻接表(数组实现)”
- HDU4055:Number String(DP)
- 分类算法系列1-----KNN(K近邻)算法思想和python实现
- zookeeper那点事
- react-bits:使用组件进行文本格式化
- 大数阶乘问题(数组元素存取多位数)
- 方向导数、梯度、等高线、数量场与向量场
- 10013---02 Apache Solr: 概览 Solr在信息系统架构中的位置
- Spring学习总结(一)——Spring实现IoC的多种方式
- Android listview 的 item 点击无效(无法获取焦点)的解决方法