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> ...
随机推荐
- jmeter-BeanShell Sampler
https://www.cnblogs.com/ShadowXie/p/6025941.html
- Layui 弹出层组件——layer
layer是作为Layui[经典模块化前端框架]的一个弹层模块,由于其用户基数较大,所以把layer作为独立组件来维护. 基础参数: 基础参数主要指调用方法时用到的配置项,如:layer.open({ ...
- DataTable转换成匿名类的List类型
DataTable转换成匿名类的List类型 因为匿名类是不能够 Activator.CreateInstance进行反射实例化的 /// <summary> /// 匿名类的转换方式 ...
- 轻松学,浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI) 依赖注入和控制反转的理解,写的太好了。
轻松学,浅析依赖倒置(DIP).控制反转(IOC)和依赖注入(DI) 2017年07月13日 22:04:39 frank909 阅读数:14269更多 所属专栏: Java 反射基础知识与实战 ...
- https://github.com/CocoaPods/CocoaPods/search?q=No+such+file+or+directory报错解决方式
――― MARKDOWN TEMPLATE ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ### Command ``` /U ...
- Ubuntu11.04中如何将pycharm添加到系统的“应用程序”菜单里 (pycharm已成功安装)
默认排序 Stu.zhouyc 21 人赞同了该回答 tools---->create desktop entry...不是很方便吗? 发布于 2016-04-09 21添加评论 分享 收藏 ...
- XML 实体扩展攻击libxml_disable_entity_loader
XML 实体扩展攻击libxml_disable_entity_loader https://pay.weixin.qq.com/index.php/public/cms/content_detail ...
- unity, remove a scene from build settings
把scene添加到build settings的scenes in build列表里以后,如果想删除,没有菜单可用,但选中按delete即可. 参考:http://answers.unity3d.co ...
- JAVA连接各种数据库详解
Java数据库连接(JDBC)由一组用 Java 编程语言编写的类和接口组成.JDBC 为工具/数据库开发人员提供了一个标准的 API,使他们能够用纯Java API 来编写数据库应用程序.然而各个开 ...
- redis源码学习_字典
redis中字典有以下要点: (1)它就是一个键值对,对于hash冲突的处理采用了头插法的链式存储来解决. (2)对rehash,扩展就是取第一个大于等于used * 2的2 ^ n的数作为新的has ...