Number String(HDU 4055,动态规划递推,前缀和优化)

news/2025/3/22 2:03:27
点击加号查看代码
#include<bits/stdc++.h>//前缀和优化版本,不易理解
using namespace std;
#define ll long long
const ll maxn=1100;
const ll mod=1000000007;
ll sum[maxn][maxn];
ll dp[maxn][maxn];
char str[maxn];int main()
{str[0]='*';str[1]='*';scanf("%s",str+2);ll len=strlen(str)-1;sum[1][1]=1;dp[1][1]=1;for(ll i=2;i<=len;i++)for(ll j=1;j<=i;j++){if(str[i]=='I'||str[i]=='?'){dp[i][j]=(dp[i][j]+sum[i-1][j-1])%mod;}if(str[i]=='D'||str[i]=='?'){ll temp=((sum[i-1][i-1]-sum[i-1][j-1])%mod+mod)%mod;dp[i][j]=(dp[i][j]+temp)%mod;}sum[i][j]=(dp[i][j]+sum[i][j-1])%mod;}cout<<sum[len][len]<<endl;
}
前缀和优化版本,不易理解
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll maxn=1100;
const ll mod=1000000007;
ll dp[maxn][maxn];
char str[maxn];int main()
{str[0]='*';str[1]='*';scanf("%s",str+2);ll len=strlen(str)-1;dp[1][1]=1;for(ll i=2;i<=len;i++)for(ll j=1;j<=i;j++){if(str[i]=='I'){for(ll k=1;k<j;k++){dp[i][j]+=dp[i-1][k]%mod;}}else if(str[i]=='D'){for(ll k=j;k<i;k++){dp[i][j]+=dp[i-1][k]%mod;}}else{for(ll k=1;k<=i;k++){dp[i][j]+=dp[i-1][k]%mod;}}}ll ans=0;for(ll i=1;i<=len;i++){ans+=dp[len][i]%mod;}cout<<ans<<endl;
//        for(int i=1;i<=len;i++)//测验每一个dp是否符合预期
//            for(int j=1;j<=len;j++)
//            {
//                printf("%d  ",dp[i][j]);
//                if(j==len)
//                    printf("\n");
//            }
}
超时版本,但是容易理解

思路用图表示

首先感谢糖栗子的博文http://www.cnblogs.com/tanglizi/p/9471078.html以及他的热心帮助

下面上图:

 

 

 

转载于:https://www.cnblogs.com/zyacmer/p/9955382.html


https://dhexx.cn/news/show-1646346.html

相关文章

货物崇拜和货物崇拜编程

“货物崇拜编程”来源于“货物崇拜”这个词。 货物崇拜(英文&#xff1a;Cargo Cults&#xff0c;又译货物运动)是一种宗教形式&#xff0c;尤其出现于一些与世隔绝的落后土著之中。当货物崇拜者看见外来的先进科技物品&#xff0c;便会将之当作神祇般崇拜。美拉尼西亚盛行的一…

SQL-43 将所有to_date为9999-01-01的全部更新为NULL,且 from_date更新为2001-01-01。

题目描述 将所有to_date为9999-01-01的全部更新为NULL,且 from_date更新为2001-01-01。CREATE TABLE IF NOT EXISTS titles_test (id int(11) not null primary key,emp_no int(11) NOT NULL,title varchar(50) NOT NULL,from_date date NOT NULL,to_date date DEFAULT NULL);i…

bootstrap风格的multiselect插件——类似邮箱收件人样式

在开发颗粒云邮箱的过程中&#xff0c;遇到了一个前端的问题&#xff0c;就是邮箱收件人的那个multiselect的input输入框。不仅能够多选&#xff0c;还要能够支持ajax搜索&#xff0c;把联系人搜索出来。就是类似下面的这个东西&#xff1a; 网上找了很多类似的插件&#xff0c…

游戏编程入门手册

原文地址&#xff1a; http://www.gameres.com/Tutor/ 游戏制作新人&#xff1a; 用什么语言和编译器来做游戏&#xff1f; DirectX是什么&#xff1f; 学编程需要哪些书&#xff1f; 我怎样制作游戏&#xff1f; 哪些书是介绍游戏开发的&#xff1f; VC好还是C好&#xff1f;…

python安装教程(Windows系统,python3.7为例)

2019独角兽企业重金招聘Python工程师标准>>> python安装教程&#xff08;Windows系统,python3.7为例&#xff09; 2018年07月02日 20:33:56 duandian01 阅读数&#xff1a;27422 标签&#xff1a; pythonpython安装python入门 1. 在python的官网下载python对应版本&…

手机黑盒测试详细介绍

2019独角兽企业重金招聘Python工程师标准>>> 1、 Release Test Purpose: 测试手机的基本功能是否实现&#xff0c;是否有进一步测试的必要性 Attention: Release Test的Test Case具有一定的典型性&#xff0c;主要是反映手机最基本功能的Test Case 本类测试只需要依…

深入学习js之——词法作用域和动态作用域#2

深入学习js系列是自己阶段性成长的见证&#xff0c;希望通过文章的形式更加严谨、客观地梳理js的相关知识&#xff0c;也希望能够帮助更多的前端开发的朋友解决问题&#xff0c;期待我们的共同进步。 如果觉得本系列不错&#xff0c;欢迎点赞、评论、转发&#xff0c;您的支持就…

【原创】Aptana 插件离线安装方式

2019独角兽企业重金招聘Python工程师标准>>> Aptana 网站改版后取消了eclipse 插件的zip直接下载地址&#xff0c;其实aptana 官网仍还提供aptana 插件的zip包下载不过比较隐蔽而已。很多人在线安装时候很慢有时甚至失败&#xff0c;下面提供下aptana eclipse 插件z…

Type Conversion

文章著作权归作者所有。转载请联系作者&#xff0c;并在文中注明出处&#xff0c;给出原文链接。 本文原更新于作者的github博客&#xff0c;这里给出链接。 什么是转换 转换是接受一个类型的值并使用它作为另一个类型的等价值的过程。转换后值等价&#xff0c;类型为目标类型。…

EIGRP基本详细配置

下面我将详细的介绍EIGRP的基本配置&#xff01;拓扑图 如下ip地址表&#xff1a; R1 s0/0 192.168.1.1/24R2 s0/0 192.168.1.2/24 s0/1 192.168.2.2/24R3 s0/1 192.168.2.1/24 连接方式 : Router1 S0/0 <----> Router2 S0/0 Router2 S0/1 <-…