Codeforces 404D [DP]
/*
我是一个习惯后悔,但是没办法忍受内疚感的二货== 这题是个无脑dp,但是比赛大概20min没出...其实最后5min我好好想想简单化边界条件,可以出的。
题意:
给你一个长度为1e6的由?*01四种字符组成的字符串,类似扫雷,?代表当前不确定,0代表当前无雷,并且
两边无雷,1代表当前五雷且两边有一个雷,2同样的,问当所有格子已知以后一共有多少种可能的局面。
思路:
首先想到的是,这个问题无后效性,而当前位置的合法方式只与它之前的两位有关。
所以dp的思路也是显而易见的,即dp[i][j]代表前i个最后两位的情况是j的时候的方案数。
其实最后两位的一共16种组合合法的方式只有9种。 注意:
也是我比赛被坑的地方,处理边界条件。
首先对于最后的两位是有要求的,例如最后一位不可能是2...(还有其他的情况),答案即把最后两位合法的情况加起来。
然后dp一开始的第一位该如何办...
我比赛的时候想暴力写前两位的情况,然后dp后来发现这么写代码量...然后崩了....
然后刚想了想,其实我枚举第一位所有可能的情况就好。
因为合法的9种情况中有许多是等价的,我只需在其中选择一项使得dp[1][i]=1即可 ...
然后WA6...因为最后累加答案的时候忘记取模了...傻逼错误简直了== */ #include<bits/stdc++.h>
#define N 1000050
using namespace std;
long long dp[N][];
long long mod=1e9+;
char jilu[N];
inline void z(int a,int b,int i){
dp[i][a]+=dp[i-][b];
dp[i][a]%=mod;
}
long long ans=;
void ggg(int len)
{
for(int i=;i<=len;i++){
if(jilu[i]=='?'){
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
}
else if(jilu[i]==''){
z(,,i);
z(,,i);
z(,,i);
}
else if(jilu[i]==''){
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
}
else if(jilu[i]==''){
z(,,i);
z(,,i);
z(,,i);
}
else{
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
z(,,i);
}
}
ans+=dp[len][];
ans%=mod;
ans+=dp[len][];
ans%=mod;
ans+=dp[len][];
ans%=mod;
ans+=dp[len][];
ans%=mod;
ans+=dp[len][];
ans%=mod;
ans+=dp[len][];
ans%=mod;
}
int main()
{
scanf("%s",jilu+);
int len=strlen(jilu+);
if(len<){
if(jilu[]==''||jilu[]==''){
cout << <<endl;
}
else if(jilu[]=='?'){
cout << <<endl;
}
else{
cout << <<endl;
}
return ;
}
switch (jilu[]){
case '?':
dp[][]=;
dp[][]=;
dp[][]=;
break;
case '':
dp[][]=;
break;
case '':
dp[][]=;
break;
case '*':
dp[][]=;
}
ggg(len);
cout << ans <<endl;
}
Codeforces 404D [DP]的更多相关文章
- CodeForces 404D Minesweeper 1D (DP)
题意:给定一个序列,*表示雷,1表示它旁边有一个雷,2表示它旁边有两个雷,0表示旁边没有雷,?表示未知,求有多少情况. 析:dp[i][j] 表示第 i 个放 j 状态,有多少种情况,然后很简单的DP ...
- codeforces的dp专题
1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...
- Two Melodies CodeForces - 813D (DP,技巧)
https://codeforces.com/problemset/problem/813/D dp[i][j] = 一条链以i结尾, 另一条链以j结尾的最大值 关键要保证转移时两条链不能相交 #in ...
- Consecutive Subsequence CodeForces - 977F(dp)
Consecutive Subsequence CodeForces - 977F 题目大意:输出一序列中的最大的连续数列的长度和与其对应的下标(连续是指 7 8 9这样的数列) 解题思路: 状态:把 ...
- 【codeforces 404D】Minesweeper 1D
[题目链接]:http://codeforces.com/problemset/problem/404/D [题意] 让你玩一个1维的扫雷游戏; 游戏的描述由数字0..2以及符号*表示; 分别表示这个 ...
- Codeforces 721C [dp][拓扑排序]
/* 题意:给你一个有向无环图.给一个限定t. 问从1点到n点,在不超过t的情况下,最多可以拜访几个点. 保证至少有一条路时限不超过t. 思路: 1.由无后向性我们可以知道(取决于该图是一个DAG), ...
- CodeForces 607C (DP) Hard problem
题目:这里 题意:给定n个字符串,每个字符串可以进行一项操作,就是将这个字符串交换,就是该字符串的第一个和最后一个交换,第二个和倒数第二个交换,以此类推,当然可以选择对于 该字符串进行或不进行这项操作 ...
- Codeforces 611d [DP][字符串]
/* 题意:给一个长度不超过5000的字符串,每个字符都是0到9的数字. 要求将整个字符串划分成严格递增的几个数字,并且不允许前导零. 思路: 1.很开心得发现,当我在前i个区间以后再加一个区间的时候 ...
- Codeforces 119C DP
题意: 有n天,m门课和常数k; 每天上一门课,每门课程有两个属性,最少作业量a,最多作业量b,和难度c. 1<=a<=b<=1e16 c<=100 1<=n<=m ...
随机推荐
- MySQL和MongoDB语句的写法对照
查询: MySQL: SELECT * FROM user Mongo: db.user.find() MySQL: SELECT * FROM user WHERE name = ’starlee’ ...
- spring基于注解的配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 禁用 BootStrap Modal 点击空白时自动关闭
方法如下 $('#myModal').modal({backdrop: 'static', keyboard: false}); 这样就可以了, backdrop 为 static 时,点击模态对话框 ...
- mysql将字符转换成数字
在操作mysql时,经常需要将字符转换成数字,这一步虽然简单,但不常用的话也很容易忘记,现将在网上找到的方法记录如下: 1.将字符的数字转成数字,比如'0'转成0可以直接用加法来实现例如:将pony表 ...
- GitHub简单使用入门
自从google code关闭了下载服务了之后,GitHub作为了目前最好用的免费开源项目托管站点,众多开源项目都托管在github,其中不乏著名的播放器MPC-HC. 不习惯于英文的朋友,难免少不了 ...
- 【linux】find命令详解
find命令格式:find [搜索范围][匹配条件] -name 参数:按照名字查找 [root@andon ~]# find /root -name test ###精确查找 /root/test ...
- Python 通过pickle标准库加载和保存数据对象
import pickle with open('mydata.pickle','wb') as mysavedata: pickle.dump([1,2,'three'], mysavedata) ...
- 在Linux中使用VS Code编译调试C++项目
最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...
- oracle行转列(连接字符串函数)
方法一:wmsys.wm_concat(column) 介绍:其函数在Oracle 10g推出,在10g版本中,返回字符串类型,在11g版本中返回clob类型.括号里面的参数是列,而且可以是多个列的集 ...
- Oracle11g中Exp命令空表不能导出的问题
http://www.jb51.net/article/43894.htm 一.不能导出空表的原因 1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空 ...