Codeforces 803E--Roma and Poker (DP)
原题链接:http://codeforces.com/problemset/problem/803/E
题意:给一个n长度的字符串,其中'?'可以替换成'D'、'W'、'L'中的任意一种,'D'等价于0, 'W'等价于1、'L'等价于-1。输出所有'?'被替换掉后,W和L的数目之差为k,且任意一个[1, i]的子串中W和L数目之差不能等于k。
思路:用DP做。定义bool dp[i][j]代表前i个字符W和L数目之差为j, -k<=j<=k(在数组中范围为[0, 2*k]),那么当str[i]为'D'时dp[i][j]转移到dp[i-1][j], 为'W'时dp[i][j]转移到dp[i-1][j+1], str[i]为'D'时dp[i][j]转移到dp[i-1][j-1], 初始值dp[0][0]为true。
接着用一遍dfs倒推求结果,注意字符加的位置。
AC代码:
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<string> 5 using namespace std; 6 int dp[2005][4005]; 7 int n,k; 8 string str; 9 void change(int i, int L, int D, int W){ 10 for(int j=1;j<2*k;j++){ 11 if(dp[i-1][j]){ 12 if(D) dp[i][j]=1; 13 if(L){ 14 if(i!=n&&j-1==0)//[1, i]子串中W和L数目之差不能等于k 15 continue; 16 dp[i][j-1]=1; 17 } 18 if(W){ 19 if(i!=n&&j+1==2*k) 20 continue; 21 dp[i][j+1]=1; 22 } 23 } 24 } 25 return; 26 } 27 string ss; 28 //int t=0; 29 bool res(int i, int j, string ans){ 30 //t++; 31 if(i==0&&j==k){ 32 ss=ans; 33 return 1; 34 } 35 if(str[i-1]!='?'){ 36 if(str[i-1]=='D') return res(i-1, j, 'D'+ans); 37 if(str[i-1]=='W') return res(i-1, j-1, 'W'+ans); 38 if(str[i-1]=='L') return res(i-1, j+1, 'L'+ans); 39 } 40 else 41 { 42 if(dp[i-1][j]&&res(i-1, j, 'D'+ans)) return 1; 43 if(dp[i-1][j-1]&&res(i-1, j-1, 'W'+ans)) return 1; 44 if(dp[i-1][j+1]&&res(i-1, j+1, 'L'+ans)) return 1; 45 } 46 47 return 0; 48 } 49 int main() 50 { 51 while(cin>>n>>k) 52 { 53 memset(dp, 0, sizeof(dp)); 54 dp[0][k]=1; 55 cin>>str; 56 if(str[n-1]=='D'){ 57 cout<<"NO"<<endl; 58 continue; 59 } 60 for(int i=1;i<=n;i++){ 61 if(str[i-1]=='?') 62 change(i, 1, 1, 1); 63 else if(str[i-1]=='D') 64 change(i, 0, 1, 0); 65 else if(str[i-1]=='W') 66 change(i, 0, 0, 1); 67 else 68 change(i, 1, 0, 0); 69 } 70 string ans; 71 if(dp[n][0]){ 72 res(n, 0, ans); 73 cout<<ss<<endl; 74 } 75 else if(dp[n][2*k]){ 76 res(n, 2*k, ans); 77 cout<<ss<<endl; 78 } 79 else 80 cout<<"NO"<<endl; 81 //cout<<t<<endl; 82 } 83 return 0; 84 }
这代码调了我好久啊QAQ,感觉自己真菜
转载于:https://www.cnblogs.com/MasterSpark/p/7450853.html
Codeforces 803E--Roma and Poker (DP)相关推荐
- Codeforces Round #791 (Div. 2)(A-D)
Codeforces Round #791 (Div. 2)(A-D) A. AvtoBus 题意: 给你 n, 问满足 4x+6y=n4x+6y=n4x+6y=n 的 x+yx+yx+y的最小值和最 ...
- 求三角形最大面积(DP)
求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...
- LeetCode 编辑距离 II(DP)
1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...
- LeetCode 1220. 统计元音字母序列的数目(DP)
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...
- LeetCode 265. 粉刷房子 II(DP)
文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...
- LeetCode 256. 粉刷房子(DP)
文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...
- LeetCode 1223. 掷骰子模拟(DP)
1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...
- LeetCode 1155. 掷骰子的N种方法(DP)
1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...
- LeetCode 1139. 最大的以 1 为边界的正方形(DP)
1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...
最新文章
- 纯CSS3实现宽屏二级下拉菜单
- C#中new和override的区别
- postgresql集群方案hot standby初级测试(二) ——处理数据能力
- 通过数据扩充来扩展数据集
- 严防ARP病毒的六个步骤
- ffmpeg和SDL教程 04:创建线程
- css3-13 css3的3D动画如何实现
- java Math.random()
- C#将日期转化成英文
- 为什么女程序员那么少,我觉得程序员应该是最适合女性的职位
- 引爆5G市场,场景为王?
- 四路组相联原理_计算机组成原理中是如何求是几路组相联映像?
- Typora常用快捷键(详细)
- 塑胶模具设计-双色注塑模具设计36条经典经验分享
- 燕山大学计算机历年拟录取分数线,燕山大学录取分数线2021是多少分(附历年录取分数线)...
- java string转short_java类型转换
- Spring三大核心思想之AOP(面向切面编程)
- svn发布网站(转载于badb0y)
- 武汉大学计算机黄天成,UCL南区决赛武大强势夺得LOL冠军 韩国外援成焦点
- (专升本)数字多媒体技术基础(图形/图像处理软件)
热门文章
- php取json子对象属性,php中输出json对象的值(实现方法)
- 双稳态继电器工作原理图_固态继电器只有单一的作用吗?带你了解不一样的固态继电器...
- ASP.NET Core Web 应用程序系列(一)- 使用ASP.NET Core内置的IoC容器DI进行批量依赖注入(MVC当中应用)...
- C#入门详解(14)
- 【IT界的厨子】酱香鲈鱼
- nyoj164——卡特兰数(待填坑)
- Hadoop学习笔记—8.Combiner与自定义Combiner
- ETL作业调度软件TASKCTL自定义扩展作业类型插件安装
- 实体类和数据表的映射异常(XXX is not mapping[ ])
- 概率论与数理统计-ch8-假设检验