UVA 1650 Number String
https://vjudge.net/problem/UVA-1650
题意:D表示比前一个数打,I表示比前一个数小,?表示不确定
给出一个长为n由D I?组成的字符串,问满足字符串大小要求的n+1的排列的方案数
SDOI2010地精部落的套路
http://www.cnblogs.com/TheRoadToTheGold/p/7305170.html
dp[i][j]前i个数的排列中,第一个为j的方案数
#include<cstdio>
#include<cstring>
#define mod 1000000007
#define N 1000
using namespace std;
char s[N+];
int dp[N+][N+];
int main()
{
while(scanf("%s",s)!=EOF)
{
int len=strlen(s);
memset(dp,,sizeof(dp));
for(int i=;i<=len;i++) dp[][i]=;
for(int i=;i<=len;i++)
for(int j=;j<=i;j++)
{
if(s[i-]=='D' || s[i-]=='?')
for(int k=j;k<i;k++) dp[i][j]+=dp[i-][k],dp[i][j]%=mod;
if(s[i-]=='I' || s[i-]=='?')
for(int k=;k<j;k++) dp[i][j]+=dp[i-][k],dp[i][j]%=mod;
}
int ans=;
for(int i=;i<=len;i++) ans+=dp[len][i],ans%=mod;
printf("%d\n",ans);
}
}
#include<cstdio>
#include<cstring>
#define mod 1000000007
#define N 1000
using namespace std;
char s[N+];
int dp[N+][N+],sum[N+][N+];
int main()
{
while(scanf("%s",s)!=EOF)
{
int len=strlen(s);
memset(dp,,sizeof(dp));
memset(sum,,sizeof(sum));
for(int i=;i<=len;i++) dp[][i]=,sum[][i]=i+;
for(int i=;i<=len;i++)
{
if(s[i-]=='D' || s[i-]=='?') dp[i][]=sum[i-][i-],sum[i][]=dp[i][];
for(int j=;j<=i;j++)
{
if(s[i-]=='D' || s[i-]=='?') dp[i][j]=(sum[i-][i-]-sum[i-][j-]+mod)%mod;
if(s[i-]=='I' || s[i-]=='?') dp[i][j]=(dp[i][j]+sum[i-][j-])%mod;
sum[i][j]=sum[i][j-]+dp[i][j],sum[i][j]%=mod;
}
}
printf("%d\n",sum[len][len]);
}
}
UVA 1650 Number String的更多相关文章
- UVA 1558 - Number Game(博弈dp)
UVA 1558 - Number Game 题目链接 题意:20之内的数字,每次能够选一个数字,然后它的倍数,还有其它已选数的倍数组合的数都不能再选,谁先不能选数谁就输了,问赢的方法 思路:利用dp ...
- perl malformed JSON string, neither tag, array, object, number, string or atom, at character offset
[root@wx03 ~]# cat a17.pl use JSON qw/encode_json decode_json/ ; use Encode; my $data = [ { 'name' = ...
- hdu 4055 Number String(有点思维的DP)
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu4055 Number String
Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- uva live 4394 String painter 间隔dp
// uva live 4394 String painter // // 问题是,在培训指导dp运动主题,乍一看,我以为只是一点点复杂 // A A磕磕磕,两个半小时后,.发现超过例子.然而,鉴于他 ...
- Number String
Number String 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055 dp 定义状态:dp[i][j]为当strlen=i,数字结尾为j的 ...
- js Number string
Number string number Js只有一种数字类型(包括整型,浮点型) 极大或极小的可用科学计数法来表示.(7.7123e+1) 所有js数字均为64位 Js所有的数字都存储为浮点型 小数 ...
- HDU 4054 Number String
HDU 4054 Number String 思路: 状态:dp[i][j]表示以j结尾i的排列 状态转移: 如果s[i - 1]是' I ',那么dp[i][j] = dp[i-1][j-1] + ...
- 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 ...
随机推荐
- 2018软工实践—Alpha冲刺(5)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助测试的进行 测试项目运行的服务器环境 ...
- mininet实验 可视化界面形成拓扑
参考博客一 参考博客二 实验目的 mininet中内置了一个mininet可视化工具:miniedit.miniedit在mininet/mininet/examples目录下提供miniedit.p ...
- lintcode-418-整数转罗马数字
418-整数转罗马数字 给定一个整数,将其转换成罗马数字. 返回的结果要求在1-3999的范围内. 说明 什么是 罗马数字? https://en.wikipedia.org/wiki/Roman_n ...
- C#高级编程 (第六版) 学习 第二章:C#基础
第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...
- C++ auto_ptr智能指针的用法
C++中指针申请和释放内存通常采用的方式是new和delete.然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存.下面简单说一下用法. 用法一: std: ...
- iOS- Autolayout自动布局
1.前言 •在iOS程序中,大部分视图控制器都包含了大量的代码用于设置UI布局,设置控件的水平或垂直位置,以确保组件在不同版本的iOS中都能得到合理的布局 •甚至有些程序员希望在不同的设备使用相同的视 ...
- oracle 查询优化及sql改写
ORACLE有个高速缓冲的概念,这个高速缓冲就是存放执行过的SQL语句,那oracle在执行sql语句的时候要做很多工作,例如解析sql语句,估算索引利用率,绑定变量,读取数据块等等这些操作.假设高速 ...
- python接口自动化测试框架实现之字符串插入变量(字符串参数化)
问题: 在做接口自动化测试的时候,请求报文是json串,但是根据项目规则必须转换成字符串,然后在开头拼接“data=” 接口中很多入参值需要进行参数化. 解决方案: 1.Python并没有对在字符串中 ...
- JS在当前页面插入<script>标签,并执行
将<script>标签绑定到<html>上, html可换成body,header等其他存在的标签. var htmm =document.getElementsByTagNa ...
- BZOJ 1567 Blue Mary的战役地图(二维hash+二分)
题意: 求两个矩形最大公共子正方形.(n<=50) 范围这么小可以枚举子正方形的边长.那么可以对这个矩形进行二维hash,就可以在O(1)的时候求出任意子矩形的hash值.然后判断这些正方形的h ...