hdu 4055(经典问题)
总是不能正确的将一个大问题变成子问题,而且又找不到状态转移方程。 直接导致这题想了5个小时最后还是无果。。。
谨记!
Number String
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1136 Accepted Submission(s): 503
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'.
ID
DI
DD
?D
??
2
2
1
3
6
Permutation {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.
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- using namespace std;
- #define N 1100
- #define MOD 1000000007
- char g[N];
- int dp[][N];
- int main()
- {
- while(scanf("%s",g)!=EOF)
- {
- memset(dp,,sizeof(dp));
- int a=,b=;
- int len=strlen(g);
- dp[a][]=;
- int ti=;
- for(int i=;i<=len+;i++)
- {
- for(int j=;j<=i;j++)
- {
- if(g[ti]=='I')//以j结尾的。 所有情况
- {
- dp[b][j] = (dp[b][j]+dp[a][j-]);
- if(dp[b][j]>=MOD) dp[b][j]-=MOD;
- if(dp[b][j]<) dp[b][j]+=MOD;
- }
- else if(g[ti]=='D')
- {
- dp[b][j]= (dp[b][j]+dp[a][i-]-dp[a][j-]);
- if(dp[b][j]>=MOD) dp[b][j]-=MOD;
- if(dp[b][j]<) dp[b][j]+=MOD;
- }else
- {
- dp[b][j]= (dp[b][j]+dp[a][i-]);
- if(dp[b][j]>=MOD) dp[b][j]-=MOD;
- if(dp[b][j]<) dp[b][j]+=MOD;
- }
- }
- swap(a,b);
- for(int j=;j<=i;j++)
- {
- dp[b][j]=;
- dp[a][j]=(dp[a][j]+dp[a][j-]);
- if(dp[a][j]>=MOD) dp[a][j]-=MOD;
- if(dp[a][j]<) dp[a][j]+=MOD;
- }
- ti++;
- }
- //for(int i=1;i<=len+1;i++)
- // ans= (ans+dp[a][i])%MOD;
- printf("%d\n",(dp[a][len+]%MOD+MOD)%MOD);
- }
- return ;
- }
hdu 4055(经典问题)的更多相关文章
- hdu 4055 && hdu 4489 动态规划
hdu 4055: 一开始我想的递推方向想得很复杂,看了别人的博客后才醍醐灌顶: 参照他的思路和代码: #include<cstdio> #include<cstring> # ...
- HDU 4055 The King’s Ups and Downs(DP计数)
题意: 国王的士兵有n个,每个人的身高都不同,国王要将他们排列,必须一高一矮间隔进行,即其中的一个人必须同时高于(或低于)左边和右边.问可能的排列数.例子有1千个,但是最多只算到20个士兵,并且20个 ...
- HDU 4055 Number String dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4055 Number String Time Limit: 10000/5000 MS (Java/O ...
- hdu 4055 Number String
Number String http://acm.hdu.edu.cn/showproblem.php?pid=4055 Time Limit: 10000/5000 MS (Java/Others) ...
- HDU 4055 Number String:前缀和优化dp【增长趋势——处理重复选数】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055 题意: 给你一个由'I', 'D', '?'组成的字符串,长度为n,代表了一个1~n+1的排列中 ...
- HDU 4055:Number String(DP计数)
http://acm.hdu.edu.cn/showproblem.php?pid=4055 题意:给一个仅包含‘I','D','?'的字符串,’I'表示前面的数字比后面的数字要小(Increase升 ...
- hdu 3943 经典数位dp好题
/* 题意:求出p-q的第j个nya数 数位dp,求出p-q的所有nya数的个数很好求,但是询问求出最终那个第j个值时是我不会求了看了下别人的思路 具体就是把p-q的第j个转化成0-q的第low+j个 ...
- hdu 4055 递推
转自:http://blog.csdn.net/shiqi_614/article/details/7983298 题意:由数字1到n组成的所有排列中,问满足题目所给的n-1个字符的排列有多少个,如果 ...
- HDU 1176 经典dp
记录最晚时间 从time为2枚举到最晚时间 每个时间段的x轴节点都等于上一个时间段的可触及的最大馅饼数 #include<stdio.h> #include<string.h> ...
随机推荐
- 域对象的引用,ActionContext 和ServletActionContext类的使用
ActionContext 获取 域引用的map ServletActionContext获取具体域对象 //域范围 ActionContext ac = ActionContext.getConte ...
- Django Error: That port is already in use.
原文:http://stackoverflow.com/questions/20239232/error-that-port-is-already-in-use A more simple solut ...
- 使用QQ互联登录应用
QQ登录集成插件简介 互联网应用越来越多,通常每一个应用都会要求用户注册登录,粗略估记一下,QQ,微博,微信,银行帐号.邮箱,招聘网站账户,淘宝帐号,支付宝帐号,公司OA帐号....粗略算一下,十几个 ...
- photoshop cs4 破解
第一步:下载完软件,要先解压出来,有1.55G,解压. 第二步:安装时选试用30天的选项,先不要输入注册码,完成安装. 第三步:找到hosts文件,在C:\WINDOWS\system32\drive ...
- pandas知识点汇总
## pandas基础知识汇总 1.时间序列 import pandas as pd import numpy as np import matplotlib.pyplot as plt from d ...
- java 环境配置 maven 环境配置
1.windows 下Java 环境的安装和配置: 下载jdk并安装 配置环境变量: (1) 新建JAVA_HOME环境变量,赋值为JDK的安装目录: (2) 新建CLASSPATH环境变量,赋值为. ...
- Event-Souring模式
Event-Sourcing模式使用仅附加存储来记录或描写叙述域中数据所採取的动作,从而记录完整的一系列系列事件,而不是仅存储实体的当前状态.由于存储包括全部的事件,能够用来具体化域对象. Event ...
- atitit.userService 用户系统设计 v6 q413
atitit.userService 用户系统设计 v6 q413 1. 新特性1 2. Admin login1 3. 用户注册登录2 3.1. <!-- 会员注册使用 --> 商家 ...
- Linux_Command
系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # ho ...
- iOS 坐标系转换
已知button的frame,如果要计算button相对于view的frame,则可以使用以下方法 CGRect rc = [btn.superview convertRect:btn.frame t ...