• Codeforces 698A


    题目链接:http://codeforces.com/problemset/problem/698/A

    题意:

    有 $n$ 天假期,每天有四种情况:0、体育馆不开门,没有比赛;1、体育馆不开门,有比赛;2、体育馆开门,没有比赛;3、体育馆开门,有比赛。

    每天都可以选择一件事做:休息、去体育馆运动、打比赛。

    现在有一个限制条件:不能连续两天都去体育馆,或者连续两天都打比赛。要求尽量使得休息的天数最少,求出这个天数。

    题解:

    $f[i][0,1,2]$ 表示前 $i$ 天,第 $i$ 天休息/运动/比赛的情况下,最少的休息天数。

    AC代码:

    #include<bits/stdc++.h>
    #define Min(x,y,z) min(x,min(y,z))
    using namespace std;
    const int maxn=105;
    int n,a[maxn];
    int f[maxn][3]; //0休息 1体育馆 2比赛
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
    
        memset(f,0x3f,sizeof(f));
        f[0][0]=f[0][1]=f[0][2]=0;
        for(int i=1;i<=n;i++)
        {
            f[i][0]=Min(f[i-1][0],f[i-1][1],f[i-1][2])+1;
            if(a[i]==1 || a[i]==3) //有比赛
                f[i][2]=min(f[i-1][0],f[i-1][1]);
            if(a[i]==2 || a[i]==3) //体育馆开门
                f[i][1]=min(f[i-1][0],f[i-1][2]);
        }
        cout<<Min(f[n][0],f[n][1],f[n][2])<<endl;
    }
  • 相关阅读:
    去重
    JavaScript 数组
    变量
    2017.3.19 for
    2017.3.19 if,for
    2017.3.14
    2017.3.10
    2017.3.9
    2017.3.7-1
    2017.3.7
  • 原文地址:https://www.cnblogs.com/dilthey/p/10459772.html
Copyright © 2020-2023  润新知