Hoof, Paper, Scissors(USACO)
题目大意:
一种游戏(类似于石头剪刀布):两个人分别给出一个字母,然后比较:H>S,S>P,P>H,我们已知对手的字母顺序,求在前n局中我们最多能赢多少次。
由于出字母的人非常懒,所以开局后会选定一种字母,中途只会改变k次,剩余状态下只会不停重复上一次出的字母,所以请你解决这个问题;
————————————————我是分割线————————————————
好吧,这道题就是DP题。
f[i][j][k]表示出到第i局,改变了j次,目前出的是第k个字母的最多赢的局数。
然后每次DP可以从f[i-1][j][k]和f[i-1][j-1][l(l!=k)]转移
然后就是统计f[n][k][0-2],取最大值即可
下面贴代码
#include<cstdio>
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
int ds[];
char ch;
int f[][][];
int n,tot,ans;
void swap(int &a,int &b){
int tmp;
tmp=a;a=b;b=tmp;
}
int main(){
freopen("GP2.in","r",stdin);
freopen("GP2.out","w",stdout);
scanf("%d%d",&n,&tot);
for(int i=;i<=n;i++){
scanf("%s",&ch);
if(ch=='H')ds[i]=;
else if(ch=='S')ds[i]=;
else ds[i]=;
}
int pre=,lst=;
for(int i=;i<=n;i++)
{
for(int j=;j<=tot;j++)
for(int k=;k<=;k++)
{
for(int l=;l<=;l++)
{
if(k==l)f[lst][j][k]=max(f[lst][j][k],f[pre][j][l]);
else if(j)f[lst][j][k]=max(f[lst][j][k],f[pre][j-][l]);
}
f[lst][j][k]+=(ds[i]==(k+)%);
}
swap(pre,lst);
}
for(int i=;i<=tot;i++)
for(int j=;j<=;j++)
ans=max(ans,f[pre][i][j]);
printf("%d\n",ans);
fclose(stdin);
fclose(stdout);
}
Hoof, Paper, Scissors(USACO)的更多相关文章
- [BZOJ4760][Usaco2017 Jan]Hoof, Paper, Scissors dp
4760: [Usaco2017 Jan]Hoof, Paper, Scissors Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 136 Solv ...
- FFT(Rock Paper Scissors Gym - 101667H)
题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...
- Promotion Counting(USACO)
题目翻译: zxyer来到了一个神奇的公司工作,之所以神奇,是因为这个公司的员工的职位并不与他们的水平相称,有的职位极低的职员的经验非常丰富,而有些经理甚至老板都是个萌新.有一天,zxyer收到了老板 ...
- bzoj4760[USACO2017 Jan]Hoof,Paper,Scissors
题意:玩n次剪刀石头布,对方每次出什么已经知道了.你出的招数必须是连续的几段(不能超过k+1段),问你最多赢几次.(n<=100000,k<=20) 正常做法:f[i][j][k]表示前i ...
- POJ 题目分类(转载)
Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...
- POJ题目分类(转)
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- POJ题目(转)
http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法: (1)枚举. (poj1753,poj29 ...
- (转)poj算法做题顺序
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj329 ...
- (转载)ACM训练计划,先过一遍基础再按此拼搏吧!!!!
ACM大量习题题库 ACM大量习题题库 现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO ht ...
随机推荐
- linux c 调用子文件函数
今天在学习初级linux c的时候遇到了如下问题:通过主函数调用同路径下的子文件函数调用失败.博主是这样一一解决的: 首先:hello.c: hello.c: #include<bool.c&g ...
- PHP代码审计1-审计环境与调试函数
审计环境与调试函数 审计环境 测试环境 常用集成环境:phpStudy.WampServer #不同的操作系统下,漏洞测试的结果也可能不一样 PHP编写工具 EditPlu Notepad++ 代码审 ...
- 3 web框架
web框架 Web框架(Web framework)是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法. ...
- easyui-datagrid单选模式下隐藏表头的全选框
easyui-datagrid可以不使用复选框来进行单选,直接使用onSelect和 singleSelect:true就可以实现单选,但是有一些用户会比较习惯使用勾选框,这时会加一列checkbox ...
- FileStream流媒体
class Program { static void Main(string[] args) { string source = @"mana.mp4"; string targ ...
- 打开Vim/Vi代码高亮
由于新装Vim/Vi 默认是没有打开代码高亮配置的,就看到有朋友一次次到网上去找各种配置.其实Vim默认带来配置文件的样本的,只需拷贝过来就可使用. 在用户根目录(~)中新建vim的配置文件 .vim ...
- CodeIgniter学习笔记二:CI中的query_builder(AR)、连贯操作
一.开启query_builder 在application\config\database.php中添加如下代码(默认已开启): $query_builder = TRUE; 二.查询数据 //ge ...
- js学习日记-各种宽高总结(配图)
1.窗口和浏览器 window.innerWidth.window.innerHeight 浏览器内部可用宽高 window.outerWidth.window.outerHeight 浏览器 ...
- (整)Unreal渲染模块 框总览
@author: 黑袍小道 随缘查看 说明 由于搬山的渲染这部分担心自己理解错误,故而搬移官方下,后面整个完成再反过来更新 (这当且仅当做Unreal的帮助文档). 图形编程 模块 渲 ...
- C# Socket通信的服务器与客户端
客户端代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...