大致题意:

n场比赛,k个钱币。赢一场获得一个钱币,输一场失去一个钱币,一旦钱币数量为2k个或者0个,就马上离开比赛。给出n个长度字符串,由W,D,L,?四个字符组成,W表示赢,L表示输,D表示平局,?表示前三种情况的一种。

问此字符串是否是合法的赛事,如果合法,输出其中任意一种情况。

分析:

状态定义:d[i][j]表示前i场比赛,W-L=j,是否合法,合法为1,不合法为0

状态转移:if(s[i]=='D') d[i][j]=d[i-1][j];

else if(s[i]=='W') d[i][j]=d[i-1][j-1];

else if(s[i]=='L') d[i][j]=d[i-1][j+1];

else d[i][j]=max(max(d[i-1][j-1],d[i-1][j+1]),d[i-1][j]);

输出路径从尾至头遍历,因为当前状态合法,必定会有一个可转移至当前状态的之前的状态也合法,注意下赢输的差值不要为边界值就行了。

#include <bits/stdc++.h>
using namespace std; const int maxn=1005;
char s[maxn],ans[maxn];
bool d[maxn][4*maxn]; void print_path(int ) int main()
{
// freopen("in.txt","r",stdin);
int n,k;
while(~scanf("%d%d",&n,&k))
{
scanf("%s",s+1);
int mid=2000;
memset(d,0,sizeof(d));
d[0][mid]=1;
for(int i=1; i<=n; i++)
{
for(int j=mid-k; j<=mid+k; j++)
{
if(i!=n && (j==mid-k || j==mid+k))
continue;
if(s[i]=='D') d[i][j]=d[i-1][j];
else if(s[i]=='W') d[i][j]=d[i-1][j-1];
else if(s[i]=='L') d[i][j]=d[i-1][j+1];
else d[i][j]=max(max(d[i-1][j-1],d[i-1][j+1]),d[i-1][j]);
}
}
if(!d[n][mid-k] && !d[n][mid+k])
{
printf("NO\n");
continue;
}
if(d[n][mid-k])
{
int tmp=mid-k;
ans[n+1]=0;
for(int i=n; i>=1; i--)
{
if(s[i]!='?')
{
ans[i]=s[i];
if(s[i]=='L') tmp++;
else if(s[i]=='W') tmp--;
}
else
{
if(d[i-1][tmp] && tmp!=mid-k && tmp!=mid+k)
ans[i]='D';
else if(d[i-1][tmp+1] && tmp+1>mid-k && tmp+1<mid+k)
{
ans[i]='L';
tmp++;
}
else if(d[i-1][tmp-1] && tmp-1>mid-k && tmp-1<mid+k)
{
ans[i]='W';
tmp--;
}
}
}
printf("%s\n",ans+1);
continue;
}
if(d[n][mid+k])
{
int tmp=mid+k;
ans[n+1]=0;
for(int i=n; i>=1; i--)
{
if(s[i]=='L' || s[i]=='W' || s[i]=='D')
{
ans[i]=s[i];
if(s[i]=='L') tmp++;
else if(s[i]=='W') tmp--;
}
else
{
if(d[i-1][tmp] && tmp!=mid-k && tmp!=mid+k)
ans[i]='D';
else if(d[i-1][tmp+1] && tmp+1>mid-k && tmp+1<mid+k)
{
ans[i]='L';
tmp++;
}
else if(d[i-1][tmp-1] && tmp-1>mid-k && tmp-1<mid+k)
{
ans[i]='W';
tmp--;
}
}
}
printf("%s\n",ans+1);
}
}
return 0;
}

codeforces 830E dp的更多相关文章

  1. Two Melodies CodeForces - 813D (DP,技巧)

    https://codeforces.com/problemset/problem/813/D dp[i][j] = 一条链以i结尾, 另一条链以j结尾的最大值 关键要保证转移时两条链不能相交 #in ...

  2. Consecutive Subsequence CodeForces - 977F(dp)

    Consecutive Subsequence CodeForces - 977F 题目大意:输出一序列中的最大的连续数列的长度和与其对应的下标(连续是指 7 8 9这样的数列) 解题思路: 状态:把 ...

  3. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

  4. Codeforces 721C [dp][拓扑排序]

    /* 题意:给你一个有向无环图.给一个限定t. 问从1点到n点,在不超过t的情况下,最多可以拜访几个点. 保证至少有一条路时限不超过t. 思路: 1.由无后向性我们可以知道(取决于该图是一个DAG), ...

  5. CodeForces 607C (DP) Hard problem

    题目:这里 题意:给定n个字符串,每个字符串可以进行一项操作,就是将这个字符串交换,就是该字符串的第一个和最后一个交换,第二个和倒数第二个交换,以此类推,当然可以选择对于 该字符串进行或不进行这项操作 ...

  6. Codeforces 611d [DP][字符串]

    /* 题意:给一个长度不超过5000的字符串,每个字符都是0到9的数字. 要求将整个字符串划分成严格递增的几个数字,并且不允许前导零. 思路: 1.很开心得发现,当我在前i个区间以后再加一个区间的时候 ...

  7. Codeforces 404D [DP]

    /* 我是一个习惯后悔,但是没办法忍受内疚感的二货== 这题是个无脑dp,但是比赛大概20min没出...其实最后5min我好好想想简单化边界条件,可以出的. 题意: 给你一个长度为1e6的由?*01 ...

  8. Codeforces 119C DP

    题意: 有n天,m门课和常数k; 每天上一门课,每门课程有两个属性,最少作业量a,最多作业量b,和难度c. 1<=a<=b<=1e16 c<=100 1<=n<=m ...

  9. Codeforces 1096F(dp + 树状数组)

    题目链接 题意: 对于长度为$n$的排列,在已知一些位的前提下求逆序对的期望 思路: 将答案分为$3$部分 $1.$$-1$与$-1$之间对答案的贡献.由于逆序对考虑的是数字之间的大小关系,故假设$- ...

随机推荐

  1. spec cpu2006 官网

    https://www.spec.org/cpu2006/Docs/install-guide-unix.html

  2. Lua的string库函数列表

    基本函数 函数 描述 示例 结果 len 计算字符串长度 string.len("abcd") 4 rep 返回字符串s的n个拷贝 string.rep("abcd&qu ...

  3. 5.6 date:显示与设置系统时间

    date命令 用于显示当前的系统时间或设置系统时间. date [选项] +[日期格式]   date命令的参数选项及说明 OPTION参数选项-d 时间字符串 显示指定字符串所描述的时间,而非当前时 ...

  4. xxl-job使用遇到的问题(二)

    xxl-job使用遇到的问题(二) 关联阅读 xxl-job使用遇到的问题(一) 1.问题现象 最近有个老定时任务迁移到xxl-job的时候,遇到一个小问题.虽然很快解决,但是还是有必要记录一下~ j ...

  5. Spring Cloud 升级之路 - 2020.0.x - 6. 使用 Spring Cloud LoadBalancer (1)

    本项目代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们使用 Spri ...

  6. Java常用集合笔记

    最近事情比较少,闲暇之余温习巩固一下Java的一些基础知识,并做一些笔记, Java常用集合, 主要参考的这篇文章:Java常用集合 ArrayList/Vertor 1. ArrayList 的主要 ...

  7. 一文读懂一条 SQL 查询语句是如何执行的

    2001 年 MySQL 发布 3.23 版本,自此便开始获得广泛应用,随着不断地升级迭代,至今 MySQL 已经走过了 20 个年头. 为了充分发挥 MySQL 的性能并顺利地使用,就必须正确理解其 ...

  8. docker部署node.js

    1.dockerfile FROM node:14.16.0 RUN mkdir -p /var/log/lily/ RUN mkdir -p /opt/node # 工作目录 WORKDIR /op ...

  9. 汽车HUD(Head-up Display)的技术难点

    汽车HUD(Head-up Display)的技术难点 首先解析一下HUD是什么原理吧.其实就是把车的前挡风玻璃当成反射镜,在驾驶员人眼前投射一个仪表盘的虚像.图像本身来自下方的电子发光屏,发出仪表盘 ...

  10. win10下安装jmeter

    http://note.youdao.com/noteshare?id=49a31ed75e139e03055bb6fc79342ac2&sub=EFA14CDD037C4EA4BE2A42B ...