zoukankan      html  css  js  c++  java
  • Codeforces Global Round 1D(DP,思维)

    #include<bits/stdc++.h>
    using namespace std;
    int dp[1000007][7][7];
    int cnt[1000007];
    int main(){
        int n,m;
        scanf("%d%d",&n,&m);
        int x=0;
        for(int i=1;i<=n;i++){
            scanf("%d",&x);
            cnt[x]++;
        }
        for(int i=1;i<=m;i++)//只考虑前i种数字
            for(int j=0;j<=2;j++)//以i开头的三元组{i,i+1,i+2}
                for(int k=0;k<=2;k++)//以i-1开头的三元组{i-1,i,i+1}
                    for(int l=0;l<=2;l++)//以i-2开头的三元组{i-2,i-1,i}
                        if(cnt[i]-j-k-l>=0)//如果cnt[i]不能大于等于j+k+l的话该情况不成立,不用更新答案
                            dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][l]+(cnt[i]-j-k-l)/3+j);//大于等于3的话将三元组转化为{i,i,i},在i-1之后添加i即可使k和l转化为j和k同时将答案更新+j(j可能不存在所以最后的答案也是j和k都为零的情况,j和k只是为了状态转移而产生)
        printf("%d",dp[m][0][0]);
        return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    HashMap 和HashTable
    两种方式获得键盘录入
    打印流 printStream
    对象操作流--存储对象
    内存输出流
    序列流
    装饰设计模式
    递归
    IO流(使用指定的码表读写字符)
    IO-字符流 练习
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10412323.html
Copyright © 2011-2022 走看看