dp

dp[i][j]表示到了i赢和输的差为j

如果这位是?向dp[i-1][j-1],dp[i-1][j],dp[i-1][j+1]转移,如果是W向dp[i-1][j-1]转移,如果是L向dp[i-1][j+1]转移,如果是D向dp[i-1][j]转移

#include<bits/stdc++.h>
using namespace std;
const int N = ;
int n, k;
char s[N], ans[N][N * ];
int dp[N][N * ], pre[N][N * ];
int main()
{
scanf("%d%d", &n, &k);
scanf("%s", s + );
dp[][] = ;
for(int i = ; i <= n; ++i)
for(int j = -k + ; j <= k + ; ++j)
{
ans[i][j] = s[i];
if(s[i] == '?')
{
for(int l = -; l <= ; ++l) if(abs(j + l - ) < k && dp[i - ][j + l])
{
dp[i][j] = dp[i - ][j + l];
if(l == -) ans[i][j] = 'W';
else if(l == ) ans[i][j] = 'D';
else if(l == ) ans[i][j] = 'L';
pre[i][j] = j + l;
}
}
else if(s[i] == 'W')
{
if(abs(j - ) < k && dp[i - ][j - ])
{
dp[i][j] = ;
pre[i][j] = j - ;
}
}
else if(s[i] == 'L')
{
if(abs(j - ) < k && dp[i - ][j + ])
{
dp[i][j] = ;
pre[i][j] = j + ;
}
}
else if(s[i] == 'D')
{
if(abs(j - ) < k && dp[i - ][j])
{
pre[i][j] = j;
dp[i][j] = ;
}
}
}
if(!dp[n][k + ] && !dp[n][-k + ])
{
puts("NO");
return ;
}
vector<char> v;
int now = dp[n][k + ] ? k + : -k + ;
for(int i = now, j = n; i && j; i = pre[j][i], --j)
v.push_back(ans[j][i]);
reverse(v.begin(), v.end());
for(int i = ; i < v.size(); ++i) printf("%c", v[i]);
return ;
}

803E的更多相关文章

  1. AC日记——Roma and Poker codeforces 803e

    803E - Roma and Poker 思路: 赢或输或者平的序列: 赢和平的差的绝对值不得超过k: 结束时差的绝对值必须为k: 当“?”时可以自己决定为什么状态: 输出最终序列或者NO: dp( ...

  2. Codeforces 803E - Roma and Poker

    http://codeforces.com/problemset/problem/803/E E. Roma and Poker  time limit per test           2 se ...

  3. 【codeforces 803E】Roma and Poker

    [题目链接]:http://codeforces.com/contest/803/problem/E [题意] 给你一个不完整的胜负平序列(不完整是指中间有些地方为问号,让你自己选择胜负平) 让你复原 ...

  4. [反汇编练习] 160个CrackMe之018

    [反汇编练习] 160个CrackMe之018. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  5. 电脑一直报PCIE BUS错误的原因

    报错 新装Linux 系统后,每隔数分钟则报以下错误: AER:Corrected error received: 0000:00:1c:4 pcie bus error: severity=Corr ...

  6. yaffs2在am335x上实施

    一.yaffs2文件烧写(通过网口) uboot下输入如下命令: setenv ipaddr 192.168.2.110;setenv serverip 192.168.2.222;saveenv n ...

  7. 菜鸟 学注册机编写之 “MD5”

    测试环境  系统: xp sp3 调试器 :od 1.10 sc_office_2003_pro 高手不要见笑,仅供小菜玩乐,有不对或不足的地方还请多多指教,不胜感激! 一:定位关键CALL 1. 因 ...

随机推荐

  1. 7、scala面向对象编程之类

    1.  定义一个简单的类 2.getter与setter 3.自定义getter与setter方法 4.仅暴露field的getter方法 5.private[this]的使用 6.Java风格的ge ...

  2. cocos creator destroy方法

    node.destroy(),Node.destroyAllChildren并不会立即销毁,实际销毁操作会延迟到当前帧渲染前执行. 这段话可能不明白,但是在Node.destroyAllChildre ...

  3. CAD绘制一个半径标注(com接口VB语言)

    主要用到函数说明: _DMxDrawX::DrawDimRadial 绘制一个半径标注.详细说明如下: 参数 说明 DOUBLE dCenterX 被标注的曲线的中点X值 DOUBLE dCenter ...

  4. css的基础知识1

    总结:css引用:1内联:在标签中加style属性,<标签名 style="样式1:样式值1:样式2:样式值2"> </标签名>.2.内嵌:在head标签中 ...

  5. python学习笔记--关于函数的那点事1

    函数参数 1.位置参数 类似于java函数的基本参数,按照顺序和结构定义参数 2.默认参数 def method(param,defaultParam=defaultValue) 调用时,可以调用me ...

  6. BZOJ 2096: [Poi2010]Pilots 单调队列

    Code: #include<bits/stdc++.h> #define maxn 4000000 using namespace std; void setIO(string s) { ...

  7. oracle的递归运算(树运算) 无限树形

    oracle的递归运算(树运算)start with org_id ='1'connect by prior parent_id=son_id 1.前言   oracle的递归运算,在我们web页面的 ...

  8. codevs1231 最优布线问题

    1231 最优布线问题 题目描述 Description 学校需要将n台计算机连接起来,不同的2台计算机之间的连接费用可能是不同的.为了节省费用,我们考虑采用间接数据传输结束,就是一台计算机可以间接地 ...

  9. Codeforces Round #467 Div.2题解

    A. Olympiad time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  10. Linux:文本处理工具

    闲话少说,列出工具: ========================这些是查看文本用的=========================== 1,cat  用法:cat >f1 直接创建或覆盖 ...