时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

齐齐和司机正在玩剪刀石头布,不过他俩有些玩腻了,所以思考了一个全新的“剪刀石头布”的游戏。
全新的“剪刀石头布“”的胜负规则和剪刀石头布一样,每人有3种手势,分别为剪刀(scissors)、石头(rock)、布(paper)。剪刀胜于布,布胜于石头,石头胜于剪刀,当手势相同时为平局。
齐齐可以在司机出手势后再出自己的手势,但是不能连续两局出同一种手势。
他们一共进行n盘对局。每一盘中,胜者+1分,败者-1分,平局两人都不扣分。
已知司机的n局的出手势情况,求齐齐进行n盘对局后获得的最高分数。

输入描述:

第1行输入一个整数n,代表进行n盘对局。
第2-n+1行,每行输入一个字符串,为“scissors”、“rock”、“paper”之一,代表司机第i盘对局的手势情况。
数据保证:1≤n≤106

输出描述:

输出一行结果,代表齐齐进行n盘对局后获得的最高分数。
示例1

输入

3
rock
paper
scissors

输出

3

说明

齐齐可以第1盘出“paper”,第2盘出“scissors”,第3盘出“rock”,最高分数3分。
示例2

输入

2
rock
rock

输出

1

说明

齐齐可以第1盘出“paper”,第2盘出“rock”,最高分数1分。

【分析】:

【代码】:
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std; int dp[][] = {};
int n = ;
int s[] = {}; inline int getScole(int a,int b)
{
if(a==&&b==) return ;
if(a==&&b==) return -;
if(a==&&b==) return ;
if(a==&&b==) return -;
if(a==&&b==) return ;
if(a==&&b==) return -;
return ;
} int main()
{
cin>>n;
for(int i=;i<=n;i++)
{
char ss[];
cin>>ss;
if(strcmp(ss,"scissors") == )
{
s[i]=;
}
else if(strcmp(ss,"paper") == )
{
s[i]=;
}
else if(strcmp(ss,"rock") == )
{
s[i]=;
}
}
dp[][]=getScole(,s[]);
dp[][]=getScole(,s[]);
dp[][]=getScole(,s[]);
for(int i=;i<=n;i++)
{
for(int j=;j<;j++)
{
dp[i][j]=max(dp[i-][(j+)%],dp[i-][(j+)%])+getScole(j,s[i]);
}
}
cout<<max(max(dp[n][],dp[n][]),dp[n][])<<endl;
return ;
}
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<fstream>//石头1 剪刀2 布3
#include<cmath>
#include<algorithm>//while(r<l)
using namespace std;
int a[];
int dp1[];
int dp2[];
int dp3[];
char s[];
int main()
{
int n;
int ans=;
cin>>n;
memset(dp1,,sizeof(dp1));
memset(dp2,,sizeof(dp2));
memset(dp3,,sizeof(dp3));
for(int i=;i<n;i++)
{
cin>>s;
if(s[]=='r') a[i]=;
if(s[]=='s') a[i]=;
if(s[]=='p') a[i]=;
if(a[i]==)
{
dp3[i]+=;
dp2[i]-=;
if(i!=)
{
dp3[i]+=max(dp2[i-],dp1[i-]);
dp2[i]+=max(dp3[i-],dp1[i-]);
dp1[i]+=max(dp2[i-],dp3[i-]);
}
}
if(a[i]==)
{
dp1[i]+=;
dp3[i]-=;
if(i!=)
{
dp3[i]+=max(dp2[i-],dp1[i-]);
dp2[i]+=max(dp3[i-],dp1[i-]);
dp1[i]+=max(dp2[i-],dp3[i-]);
}
}
if(a[i]==)
{
dp2[i]+=;
dp1[i]-=;
if(i!=)
{
dp3[i]+=max(dp2[i-],dp1[i-]);
dp2[i]+=max(dp3[i-],dp1[i-]);
dp1[i]+=max(dp2[i-],dp3[i-]);
}
} }
cout<<max(max(dp1[n-],dp2[n-]),dp3[n-]);
return ;
}

2

中矿大 C 石头剪刀布【决策DP*待看/codeforces原题】的更多相关文章

  1. LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律

    二次联通门 : LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律 /* LibreOJ #516. 「LibreOJ β Round #2」DP 一般看规律 set ...

  2. 前端自学vs跟大神系统学?你看着办

    前端自学vs跟大神系统学?你看着办 一名广告专业学生,在大三的时候对于广告行业的前景不是很看好,转而自学web前端,刚开始接触的前端语言是html(html应该不算编程语言),上手很容易,在w3csh ...

  3. BZOJ_1827_[Usaco2010 Mar]gather 奶牛大集会_树形DP

    BZOJ_1827_[Usaco2010 Mar]gather 奶牛大集会_树形DP 题意:Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来 ...

  4. [LOJ#516]「LibreOJ β Round #2」DP 一般看规律

    [LOJ#516]「LibreOJ β Round #2」DP 一般看规律 试题描述 给定一个长度为 \(n\) 的序列 \(a\),一共有 \(m\) 个操作. 每次操作的内容为:给定 \(x,y\ ...

  5. [原题复现][极客大挑战 2019]BuyFlag

    简介  原题复现:[极客大挑战 2019]BuyFlag  考察知识点:php函数特性(is_numeric().strcmp函数())  线上平台:https://buuoj.cn(北京联合大学公开 ...

  6. [原题复现][极客大挑战 2019]HardSQL(updatexml报错注入)

    简介  原题复现:  考察知识点:SQL注入(报错注入,绕过过滤)  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台 特别感谢!) 榆林学院内可使用信安协会内部的CTF训练平 ...

  7. P1373 小a和uim之大逃离 二维dp

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

  8. 【BZOJ】1827: [Usaco2010 Mar]gather 奶牛大集会(树形dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1827 仔细想想就好了,, 每个点维护两个值,一个是子树的费用,一个是除了子树和自己的费用.都可以用d ...

  9. 洛谷 P1373 小a和uim之大逃离 Label:dp 不会

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

随机推荐

  1. istringstream输入数据到数组

    istringstream iss(line); ; while (!(iss >> dat[n]).fail()) n++;

  2. copyEvens

    public int[] copyEvens(int[] nums, int count) { int newIndex=0; int i=0; int newArray[] = new int[co ...

  3. 剑指Offer - 九度1517 - 链表中倒数第k个结点

    剑指Offer - 九度1517 - 链表中倒数第k个结点2013-11-30 02:57 题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含 ...

  4. 不吹不擂,你想要的Python面试都在这里了【315+道题】+精心整理的解答

    Part01-Py基础篇(80) Part02-网络编程和并发(34) Part03-数据库和缓存(46) Part04-前端框架和其他(155) Part01-Py基础篇(80) 1.为什么学习Py ...

  5. Unity插件

    1.2D Toolkit 如果过去你一直从事3D游戏开发,最近想转做2D游戏,最好尝试一下2D Toolkit.2D Toolkit是一款2D开发组件,它具有很强的灵活性和适应性,能够让开发者在Uni ...

  6. shell之ip命令

    转:出处我也不知道了,学习时候记下的笔记 1.作用 ip是iproute2软件包里面的一个强大的网络配置工具,它能够替代一些传统的网络管理工具,例如ifconfig.route等,使用权限为超级用户. ...

  7. 游戏开发学习ing

    创建工程 python cocos.py new HelloWorld -p com.cocos2dx.org -l cpp -d myprojects 这个命令就是运行python然后编译cos.p ...

  8. KMP与循环节相关题目

    HDU 3746 Cyclic Nacklace ( KMP求最小循环节 ) len - nextval[len]即为最小循环节长度. #include <cstdio> #include ...

  9. Redis、Mongodb、memcache区别在哪里?

    最近在看一本书<php mvc开发实战>看到Redis实战部分,详细介绍了几种缓存的区别和对比,帮助解决这方面的疑惑 Redis适合哪些业务场景?

  10. shit vue-cli & path bug & baseUrl bug

    vue-cli path bug https://cli.vuejs.org/zh/guide/#cli baseUrl bug baseUrl: "././" , https:/ ...