Number String

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055

dp

定义状态:dp[i][j]为当strlen=i,数字结尾为j的方案数.

当为'I'时,dp[i][j]=∑dp[i-1][1...j-1];//若之前填过j,可以让前面j到i的数+1

当为'D'时,dp[i][j]=∑dp[i-1][j...i];

当为'?'时,dp[i][j]=∑dp[i-1][1...i].

于是我们有了O(n3)的算法:

 #include<cstdio>
#include<cstring>
#define N 1005
#define M 1000000007
using namespace std;
typedef long long LL;
char a[N];
LL dp[N][N],len;
int main(void){
while(~scanf("%s",a+)){
memset(dp,,sizeof(dp));
len=strlen(a+);
for(LL i=;i<=len;++i)
dp[][i]=;
for(LL i=;i<=len;++i){
if(a[i]=='I'){
for(LL j=;j<=i;++j)
if(dp[i-][j]){
for(LL k=j+;k<=i+;++k)
dp[i][k]=(dp[i][k]+dp[i-][j])%M;
}
}else if(a[i]=='D'){
for(LL j=;j<=i;++j)
if(dp[i-][j]){
for(LL k=;k<=j;++k)
dp[i][k]=(dp[i][k]+dp[i-][j])%M;
}
}else if(a[i]=='?'){
for(LL j=;j<=i;++j)
if(dp[i-][j]){
for(LL k=;k<=i+;++k)
dp[i][k]=(dp[i][k]+dp[i-][j])%M;
}
}
}
LL ans=;
for(LL i=;i<=len+;++i)
ans=(ans+dp[len][i])%M;
printf("%I64d\n",ans);
}
}

但是这个复杂度是不能ac的,需要优化。

注意到状态转移的时候,出现了类似前缀和的性质,于是可以维护一个pre[N]数组,使复杂度达到O(n2

代码如下:

 #include<cstdio>
#include<cstring>
#define N 1005
#define M 1000000007
using namespace std;
typedef long long LL;
char a[N];
LL dp[N][N],len,pre[N];
int main(void){
while(~scanf("%s",a+)){
memset(dp,,sizeof(dp));
memset(pre,,sizeof(pre));
len=strlen(a+);
for(LL i=;i<=len;++i){
dp[][i]=;
pre[i]=pre[i-]+dp[][i];
}
for(LL i=;i<=len;++i){
if(a[i]=='I'){
for(LL j=;j<=i+;++j)
dp[i][j]=pre[j-];
}else if(a[i]=='D'){
for(LL j=;j<=i+;++j)
dp[i][j]=(pre[i]-pre[j-]+M)%M;
}else if(a[i]=='?'){
for(LL j=;j<=i+;++j)
dp[i][j]=pre[i];
}
for(LL j=;j<=i+;++j)
pre[j]=(pre[j-]+dp[i][j])%M;
}
printf("%I64d\n",pre[len+]);
}
}

感觉dp的题目刚开始想出来的算法,要么会超时,要么会爆空间,需要优化。

然而我的优化方案是写完高复杂度代码后,按照转移方程的形式进行优化。

这样做的坏处是,优化完了方程面目全非,自己也不知道方程的意义...

可能是太弱了吧,继续加油~

//这两个星期金工实习,不用去上好爽~

Number String的更多相关文章

  1. 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' = ...

  2. hdu 4055 Number String(有点思维的DP)

    Number String Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  3. hdu4055 Number String

    Number String Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...

  4. js Number string

    Number string number Js只有一种数字类型(包括整型,浮点型) 极大或极小的可用科学计数法来表示.(7.7123e+1) 所有js数字均为64位 Js所有的数字都存储为浮点型 小数 ...

  5. 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] + ...

  6. 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 ...

  7. HDU 4055 Number String dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4055 Number String Time Limit: 10000/5000 MS (Java/O ...

  8. hdu 4055 Number String

    Number String http://acm.hdu.edu.cn/showproblem.php?pid=4055 Time Limit: 10000/5000 MS (Java/Others) ...

  9. hdu 4055 Number String (基础dp)

    Number String Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

随机推荐

  1. C语言之if和switch的分别

    If和switch的互换规则 用if语句能实现的东西,用switch也可以实现 用switch语句能实现的东西,用if也可以实现 1.如果是判断范围的时候,用switch不太好做,没法直接做 2.如果 ...

  2. [ios] 微信订阅号: ios博文精选

    晚上下班后时间充裕,平时要么看电视剧,要么玩游戏 感觉浪费时间.  最后决定自己也搞一个微信订阅号分享技术方面的东西,也提升自己. 如果大家也是一样情况,欢迎大家关注我的订阅号. 微信订阅号: ios ...

  3. Linux中的info指令

    Info 是什么?info是一种文档格式,也是阅读此格式文档的阅读器:我们常用它来查看Linux命令的info文档.它以主题的形式把几个命令组织在一起,以便于我们阅读:在主题内以node(节点)的形式 ...

  4. 蓝桥杯 C语言 基础训练 数列排序

    问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000. 输 ...

  5. CentOS 7安装nginx

    CentOS 7安装nginx 参考网上其他文章做的 安装Nginx 我们从nginx官方的RPM源来安装一个预构建的稳定版本的nginx包. rpm --import http://nginx.or ...

  6. Qt-剪切板

    ClipBoard 存在的意义 进程间数据共享. 方式 Drag And Drop: clipBoard的拖曳方式 app's ClipBoard 缺点 没有权限管理 在Model View中实现Dr ...

  7. 通过file文件选择图片预览功能

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. JAVA上连接ubuntu14.04上的Hbase

    对于新手来说,连接虚拟机上的Hbase有点繁琐,而且网上的配置不太适合初学者,今天我就整理了一下,希望对你们有帮助,第一次发博客. 1.首先去官网下载Hbase的压缩包.我这里用的是1.2.1 htt ...

  9. NLog在MVC中使用

    NLog在MVC中使用 在site根目录新建NLog.config <?xml version="1.0"?> <configuration> <nl ...

  10. ECStore图片存储采用阿里云OSS(图片存储)服务

    主要功能:ECStore图片存储采用阿里云OSS(图片存储)服务   适用版本:ECStore 授权方式:授权域名使用,付费插件 联系方式: QQ 275553385  mail: jimingson ...