首页 > 其他分享 >*Codeforces Round #363 (Div. 1) A. Vacations(状态机)

*Codeforces Round #363 (Div. 1) A. Vacations(状态机)

时间:2022-08-22 17:44:34浏览次数:126  
标签:Vasya 体育馆 比赛 int 一天 Codeforces 状态机 天中 Round

https://codeforces.com/contest/698/problem/A

Vasya有n天假期!Vasya知道关于这n天中每一天的以下信息:那家健身房是否开门,以及那天是否在互联网中进行了比赛。第i天有四个选项:

0 这一天体育馆关闭,比赛也不进行;
1 这一天体育馆关闭,比赛开始;
2 这一天健身房开放,比赛不进行;
3 在这一天,体育馆开放,并进行比赛。
每一天Vasya可以休息或者写比赛(如果比赛在这一天进行),或者做运动(如果体育馆在这一天开放)。

找出Vasya休息的最少天数(这意味着,他不会同时做运动和写比赛)。Vasya的唯一限制是——他不想连续两天做同样的活动:这意味着,他不会连续两天做运动,连续两天写比赛。

简单的来说,题目意思就是n天中,他想最大化利用打比赛和运动的时间,问我们他在这n天中可以休息的时间是?

inputCopy
4
1 3 2 0
outputCopy
2
inputCopy
7
1 3 3 2 1 2 3
outputCopy
0
inputCopy
2
2 2
outputCopy
1
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
const LL N=200200,M=200;
int a[N];
int dp[M][5];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    int T=1;
    //cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        memset(dp,127,sizeof dp);
        //初始化没有开始的时候,休息时间都是为0的
        for(int i=0;i<=3;i++)
            dp[0][i]=0;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        for(int i=1;i<=n;i++)
        {
            //当天的最小的值,默认是前一天的最小值+1
            dp[i][0]=min({dp[i-1][0],dp[i-1][1],dp[i-1][2]})+1;
            //cout<<dp[i][0]<<" ";
            //如果是1的话,就可以去0和2里面找,3可以转化成1
            if(a[i]==1||a[i]==3)
            {
                dp[i][1]=min(dp[i-1][0],dp[i-1][2]);
                //cout<<dp[i][1]<<" ";
            }
            //如果是2的话,就可以去0和1里面找,3可以转化成2
            if(a[i]==2||a[i]==3)
            {
                dp[i][2]=min(dp[i-1][0],dp[i-1][1]);
                //cout<<dp[i][2]<<" ";
            }
            //cout<<endl;
        }
        cout<<min({dp[n][0],dp[n][1],dp[n][2]})<<endl;
    }
    return 0;
}

标签:Vasya,体育馆,比赛,int,一天,Codeforces,状态机,天中,Round
From: https://www.cnblogs.com/Vivian-0918/p/16613646.html

相关文章

  • CodeForces-1715D 2+ doors
    2+doors贪心位与位之间互不一向,因此考虑每个位进行考虑就行因为是或的关系,先考虑\(0\)的情况,如果出现\(0\),则两个数字的该位必然是\(0\)如果是\(1\)的情况,就考......
  • CodeForces-1715C Monoblock
    Monoblockdp先想想如何计算初始值\(dp[x]\)表示以第\(x\)个位置为\(r\),他的所有贡献状态转移:如果\(a_x=a_{x-1}\):\(dp[x]=dp[x-1]+1\),代表只增加了\(l......
  • CodeForces-1719D Burenka and Traditions
    BurenkaandTraditions贪心由于代价是向上取整的,因此可以直接考虑成两种方式:选择两个相邻的数,让他们同时异或上一个值选择一个数字,让他变成\(0\)由此可见,最多......
  • 如何使用.NET 6的IHostedService和BackgroundService?
    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进。本章是《定制ASPNET6.0框架系列文章》的第七篇。本......
  • Codeforces Round #743 (Div. 2) B. Swaps(思维)
    https://codeforces.com/contest/1573/problem/B给定两个长度为n的数组,数组a和数组b数组a包含从1到2*n的任意顺序的奇数,数组b包含从1到2*n的任意偶数可执行的操作如下:......
  • Codeforces 1715E - Long Way Home
    又是废掉的一个div2啊第一次在学校熬夜打cf,开心还看到了自己最喜欢的斜率优化ohhh链接:E-LongWayHome看到那个平方就可以靠感觉认为是斜率优化了....感觉似不似......
  • Codeforces Round #816 (Div. 2)
    题面A.Crossmarket不妨设\(n\gem\),则答案为\(n+2(m-1)\)。特别地,\(n=1,m=1\)时答案为\(0\),注意特判。ViewCode#include<stdio.h>#include<algorithm>int......
  • [Codeforces Round #816 (Div. 2)] D. 2+ doors
    这次Div.2比之前我打的有些要难啊,前三道题就耗了好多时间,D题干脆摆烂了。。。还是太逊了对于一个\(x\),有\(x|y_i=z_i\),那么我们设\(num[x]=z_1\)&\(z_2\)&\(z_3\)..........
  • 【长期】板刷Codeforces 1500-1700 的构造题
    【长期】板刷Codeforces1500-1700的构造题https://codeforces.com/problemset/page/1?tags=constructive+algorithms%2C1500-1700&order=BY_RATING_ASC每天三道,记录一......
  • Codeforces 1720 D, E
    D1设\(dp(i)\)表示考虑前i个数的最长子序列。枚举\(j\),从\(dp(j)+1\)转移到\(dp(i)\),转移条件就是题中给的那个不等式。发现\(i-j\)不能超过\(300\),暴力枚举即可。时间......