HDU 4055 Number String(不错的DP题)
来源:互联网 发布:photoshop cc软件下载 编辑:程序博客网 时间:2024/05/18 00:12
题意:
给你一个字符串s,s[i] = 'D'表示排列中a[i] > a[i+1],s[i] = 'I'表示排列中a[i] < a[i+1]。
比如排列 {3, 1, 2, 7, 4, 6, 5} 表示为字符串 DIIDID。
解题思路:
很巧妙的DP做法,dp[i][j]表示前i个满足字符串条件的结尾为j的 i 的排列,注意是i的排列,前面并没有数大于i。那又是如何往下递推呢?
如果s[i - 1]是' I ',那么dp[i][j] = dp[i-1][j-1] + dp[i-1][j-2] + .. + dp[i-1][1]
如果s[i - 1]是‘D’,那么dp[i][j] = dp[i-1][j] + dp[i-1][j+1] + ... + dp[i-1][i],因为要令当前位为j,如果前面出现过j,就令前面的所有大于等于j的数+1,就能构造出新的排列了。比如
{1, 3, 5, 2, 4},要在第六位插入3,令 >= 3的数都+1,于是就构造出新的 排列{1, 4, 6, 2, 5, 3}。然后代码的话处理出前缀和sum[i][j],就不用dp[i][j]了。感觉还是很巧妙的,好题!
/* **********************************************Author : JayYeCreated Time: 2013/10/6 23:22:51File Name : Orz.cpp*********************************************** */#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;typedef __int64 ll;const int maxn = 1000 + 5;const int mod = 1000000007;ll sum[maxn][maxn];char s[maxn];int main() { while(scanf("%s", s) != -1) { int len = strlen(s); sum[0][1] = 1; 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("%I64d\n", sum[len][len+1]); } return 0;}
- HDU 4055 Number String(不错的DP题)
- [DP]HDU 4055 Number String
- HDU 4055 Number String dp
- HDU 4055 Number String(DP)
- hdu 4055 Number String(有点思维的DP)
- HDU 4055 Number String (dp的思想)
- HDU 4055 Number String (线性dp)
- HDU 4055 Number String(dp)
- 计数dp hdu 4055 Number String
- HDU 4055 Number String(计数dp)
- HDU 4055 Number String(11年大连区域赛-E题-DP)
- HDU 4055 Number String【DP递推+递推优化】【好题】
- hdu 4055 Number String
- hdu 4055Number string
- Hdu 4055 Number String
- hdu 4055 Number String
- HDU 4055 Number String
- hdu 4055 Number String
- 软考 之 计算机组成原理
- 寻找主元素
- 工程矩阵-SVD分解
- tomcat源码下载并导入eclipse
- Android中的.9.png图形的机制及制作和使用方法
- HDU 4055 Number String(不错的DP题)
- 树形DP专辑-ZOJ3201(Tree of Tree)
- XDCTF2013线上赛exploit关(二)
- linux系统的组成——The composition of the Linux system
- 一元多项式相加
- 在Windows8下MDK(uVision4)无法使用?!
- 数位DP--HDU4722(Good Numbers)
- TJU Change
- 软件工程—结构化分析设计