hdu4055 dp
http://acm.hdu.edu.cn/showproblem.php?pid=4055
(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.
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'.
II
ID
DI
DD
?D
? ?
1
2
2
1
3
6HintPermutation {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.
/**
hdu4055 dp
题目大意:给定一个字符串,I表示本字符要比前一个字符大,D表示本字符要不前一个字符小,?可大可小。问1~n的全部排列中,
有多少满足条件
解题思路:能够用dp[i][j]表示:处理完第i位,序列末尾位j的序列共同拥有多少个。最后的结果为sigma{dp[N][i]},1≤i≤N
处理dp[1~i][]的过程中i是依次1~n相加。处理完dp[i-1][]后,增加的数即为i,而dp[i][j]是要将i放进去j换
出来,而这里有一种将i放进去j换出来。同一时候不影响升降顺序的方法是:
将dp[i-1][j]的i-1个数的序列中 ≥j 的数都加1。这样i-1变成了i,j变成了j+1,而j自然就补在后面了。 所以对”ID“序列依次处理就可以,初始条件:dp[1][1] = 1; 即仅仅有{1}。
处理‘I’:dp[i][j] = sigma{dp[i-1][x]},当中1≤x≤j-1,可进一步简化,dp[i][j] = dp[i][j-1]+dp[i-1][j-1]
处理‘D’:dp[i][j] = sigma{dp[i-1][x]},当中j≤x≤i-1。可进一步简化。dp[i][j] = dp[i-1][j+1]+dp[i-1][j]
处理‘? ’:dp[i][j] = sigma{dp[i-1][x]}。当中1≤x≤i-1
*/
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
using namespace std;
const int mod=1e9+7;
char a[1005];
int dp[1005][1005];
int main()
{
while(~scanf("%s",a))
{
int n=strlen(a)+1;
memset(dp,0,sizeof(dp));
dp[1][1]=1;
for(int i=2;i<=n;i++)
{
char ch=a[i-2];
if(ch=='?')
{
int sum=0;
for(int j=1;j<i;j++)
{
sum=(sum+dp[i-1][j])%mod;
}
for(int j=1;j<=i;j++)
{
dp[i][j]=sum;
}
}
else if(ch=='I')
{
for(int j=2;j<=i;j++)
{
dp[i][j]=(dp[i][j-1]+dp[i-1][j-1])%mod;
}
}
else
{
for(int j=i-1;j>=1;j--)
{
dp[i][j]=(dp[i][j+1]+dp[i-1][j])%mod;
}
}
}
int ans=0;
for(int i=1;i<=n;i++)
{
ans=(ans+dp[n][i])%mod;
}
printf("%d\n",ans);
}
return 0;
}
hdu4055 dp的更多相关文章
- HDU4055 - number string(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055 思路:dp[i][j]表示处理前i个字符以j结尾可能的序列数. 当a[i]=='I'时,dp[i ...
- hdu4055
hdu4055 题意 给出一个长度为 n - 1 的字符串,要求构造一个包含数字 [1, n] 的排列,从第二位开始,'I' 表示当前位数字比前一位大,'D' 表示当前位数字比前一位小,'?' 表示可 ...
- HDU-4055:Number String
链接:HDU-4055:Number String 题意:给你一个字符串s,s[i] = 'D'表示排列中a[i] > a[i+1],s[i] = 'I'表示排列中a[i] < a[i+1 ...
- HDU-4055 Number String 动态规划 巧妙的转移
题目链接:https://cn.vjudge.net/problem/HDU-4055 题意 给一个序列相邻元素各个上升下降情况('I'上升'D'下降'?'随便),问有几种满足的排列. 例:ID 答: ...
- [总结-动态规划]经典DP状态设定和转移方程
马上区域赛,发现DP太弱,赶紧复习补上. #普通DP CodeForces-546D Soldier and Number Game 筛法+动态规划 待补 UVALive-8078 Bracket S ...
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...
- AEAI DP V3.7.0 发布,开源综合应用开发平台
1 升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...
- AEAI DP V3.6.0 升级说明,开源综合应用开发平台
AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...
随机推荐
- FusionChart实现金字塔分布图
1.XML提供数据源 Pyramid.xml: <?xml version="1.0" encoding="UTF-8"?> <chart m ...
- MySQL加密的性能测试
这是对MySQL进行加密性能测试的两篇文章系列之二.在第一篇中,我专门使用MySQL的内置的对SSL的支持来 做压力测试,产生了一些令人惊讶的结果. AD:WOT2015 互联网运维与开发者大会 热销 ...
- [Python爬虫笔记][随意找个博客入门(一)]
[Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...
- vim的基本使用方法
头记:vim作为被大多数程序员所推崇的编辑器,是源于它的自由灵活以及令人舒服的输入模式,但对于新手来说无疑是个噩梦(需要记太多的命令), 而作为使用了vim有一段时间的我来说,总结下常用的命令,以备新 ...
- css中常用的标签
最常用的标签 left 左 top 上 right 右 bottom 下 font 字体 size 大小 width 宽度 height 高度 class 类 label 标签 form 表单 gro ...
- Error:Could not determine Java version-- 关于Android Studio JDK设置和JVM version设置
最近在装AS的时候遇到一个问题,新建工程后,编译报错,Error:Could not determine Java version 不言而喻:可定是JDK的问题,网上查到2中可能性 第一:就是JDK路 ...
- SQL从入门到基础 - 05 数据分组、Having语句
一.数据分组 1. 按照年龄进行分组统计各个年龄段的人数: Select FAge,count(*) from T_Employee group by FAge; 2. Group by子句必须放到w ...
- DataBase First创建数据库
Entity Framework:ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,并提供了三种模式,分 ...
- VC++深入详解读书笔记-第六章菜单
1.MFC都是采用大写字母来标识资源ID号. 2.程序中会用到多种资源,在为资源确定其ID号时,为了明确区分资源类型,一般都遵循这样一个原则:在“ID”字符串后加上一个标识资源类型的字母,例如,我们给 ...
- 用jQuery与JSONP轻松解决跨域访问的问题【转】
原文地址:http://www.jb51.net/article/46463.htm 好在,有jquery帮忙,跨域问题似乎没那么难缠了.这次也借此机会对跨域问题来给刨根问底,结合实际的开发项目,查阅 ...