AC日记——Roma and Poker codeforces 803e
2024-09-02 09:31:24
思路:
赢或输或者平的序列;
赢和平的差的绝对值不得超过k;
结束时差的绝对值必须为k;
当“?”时可以自己决定为什么状态;
输出最终序列或者NO;
dp(随便搞搞);
来,上代码:
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int n,k,dp[][],m; char ch[]; int main()
{
cin>>n>>k;
cin>>ch+;
m=k-;dp[][m+]=true;
for(int i=;i<n;i++)
{
if(ch[i]=='W') for(int j=;j<=m*+;j++) dp[i][j]=dp[i-][j-];
else if(ch[i]=='L') for(int j=;j<m*+;j++) dp[i][j]=dp[i-][j+];
else if(ch[i]=='D') for(int j=;j<=m*+;j++) dp[i][j]=dp[i-][j];
else for(int j=;j<=m*+;j++) dp[i][j]=(dp[i-][j-]||dp[i-][j]||dp[i-][j+]);
}
if(ch[n]=='W') dp[n][*m+]=dp[n-][*m+];
else if(ch[n]=='L') dp[n][]=dp[n-][];
else if(ch[n]=='D') ;
else dp[n][]=dp[n-][],dp[n][m*+]=dp[n-][m*+];
if(!dp[n][]&&!dp[n][m*+]) cout<<"NO";
else
{
int now;
if(dp[n][m*+]) now=m*+;
else now=;
for(int i=n;i>;i--)
{
if(ch[i]=='L') now++;
else if(ch[i]=='W') now--;
else if(ch[i]=='D') now=now;
else
{
if(dp[i-][now+]) now++,ch[i]='L';
else if(dp[i-][now]) ch[i]='D';
else if(dp[i-][now-]) now--,ch[i]='W';
}
}
cout<<ch+;
}
return ;
}
最新文章
- Android 如何有效的解决内存泄漏的问题
- Gson解析复杂的json数据
- 对Prepared Statement 是否可以防止 SQL Injection 的实验
- java_Cookies_1_商品浏览历史记录servlet1
- Openstack中间DVR Part1 -- 东西走向的交通处理
- 关于调用office com组件导出Excel
- Python中else语句块(和if、while、for、try搭配使用)
- Ultra-QuickSort(树状数组+离散化)
- DFS-hdu-2821-Pusher
- (笔记):组合and继承之访问限制(二)
- LindAgile.SchedulingTask~设计一个不错的任务调度组件
- 写一个Python 1、通过select实现的最简单的web框架2、通过wsgiref实现的web框架
- npm 模块的总结
- 数组方括号有趣的split方法
- zabbix3.2监控vcenter和exsi信息
- [备份]EntityFramework
- SPREAD for Windows Forms 控制输入法
- ubuntu14.04上 nginx启动停止
- [Java] 高效快速导入EXCEL数据
- CentOS-yum基本使用