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 ...
随机推荐
- jira安装说明
阅读目录 1.1 jira说明 1.2 安装配置jira 1.3 web界面访问 1.4 创建第一个项目 1.5 参考文献 回到顶部 1.1 jira说明 JIRA是Atlassian公司出品的项目与 ...
- python基础之装饰器扩展和迭代器
wraps模块 让原函数保留原来的说明信息 import time import random from functools import wraps def auth(func): '''auth ...
- Android 自定义WebView 实现可以加载缓存数据
1.自定义WebView说明 1.1.这个WebView可以加载缓存的数据.(需要后端配合,将html转换成一个字符串,主要是图片要用特殊格式) 1.2.注入了图片链接,为了方便点击webView中的 ...
- 3,版本控制git-多人协作
如果你想获得一份已经存在了的 Git 仓库的拷贝,比如说,你想为某个开源项目贡献自己的一份力,这时就要用到 `git clone` 命令. 如果你对其它的 VCS 系统(比如说Subversion)很 ...
- 3 网格 landing page
0.大框架 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...
- Android字体大小怎么自适应不同分辨率?
今天有人问我,android系统不同分辨率,不同大小的手机,字体大小怎么去适应呢?其实字体的适应和图片的适应是一个道理的. 一. 原理如下: 假设需要适应320x240,480x320分辨率.在res ...
- linux统计分析流量-wireshark
wireshark是一款带界面的开源抓包工具,可以用来对系统流量进行统计分析. 安装 由于wireshark是带界面的,所以一般在界面环境下运行,可以通过yum安装: $ yum install -y ...
- 梆梆加固还原DEX文件
0x01 先说总结: 参照https://www.cnblogs.com/jiaoxiake/p/6818786.html 最后说的步骤, 参考:https://www.52pojie.cn/thre ...
- js实现类bootstrap模态框动画
在pc端开发,模态框是一个很常用的插件,之前一直用的第三方插件,比如bootstrap,jQuery的模态框插件,最近还用了elementUI的.但是会发现其实动画效果都差不多,那么如何去实现这样一个 ...
- HS 光流法详解
前言 本文较为详细地介绍了一种经典的光流法 - HS 光流法. 光流法简介 当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像信息不断 &quo ...