zoukankan      html  css  js  c++  java
  • Jongmah

    D. Jongmah
    time limit per test
    3 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    You are playing a game of Jongmah. You don't need to know the rules to solve this problem. You have nn tiles in your hand. Each tile has an integer between 11 and mm written on it.

    To win the game, you will need to form some number of triples. Each triple consists of three tiles, such that the numbers written on the tiles are either all the same or consecutive. For example, 7,7,77,7,7 is a valid triple, and so is 12,13,1412,13,14, but 2,2,32,2,3 or 2,4,62,4,6 are not. You can only use the tiles in your hand to form triples. Each tile can be used in at most one triple.

    To determine how close you are to the win, you want to know the maximum number of triples you can form from the tiles in your hand.

    Input

    The first line contains two integers integer nn and mm (1n,m1061≤n,m≤106) — the number of tiles in your hand and the number of tiles types.

    The second line contains integers a1,a2,,ana1,a2,…,an (1aim1≤ai≤m), where aiai denotes the number written on the ii-th tile.

    Output

    Print one integer: the maximum number of triples you can form.

    Examples
    input
    Copy
    10 6
    2 3 3 3 4 4 4 5 5 6
    output
    Copy
    3
    input
    Copy
    12 6
    1 5 3 3 3 4 3 5 3 2 3 3
    output
    Copy
    3
    input
    Copy
    13 5
    1 1 5 1 2 3 3 2 4 2 3 4 5
    output
    Copy
    4
    Note

    In the first example, we have tiles 2,3,3,3,4,4,4,5,5,62,3,3,3,4,4,4,5,5,6. We can form three triples in the following way: 2,3,42,3,4; 3,4,53,4,5; 4,5,64,5,6. Since there are only 1010 tiles, there is no way we could form 44 triples, so the answer is 33.

    In the second example, we have tiles 11, 22, 33 (77 times), 44, 55 (22 times). We can form 33 triples as follows: 1,2,31,2,3; 3,3,33,3,3; 3,4,53,4,5. One can show that forming 44 triples is not possible.

    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=1e6+10;
    int dp[maxn][5][5],n,m,p[maxn];
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            int tmp;
            scanf("%d",&tmp);
            p[tmp]++;
        }
        memset(dp,-127,sizeof(dp));
        dp[0][0][0]=0;
        for(int i=1;i<=m;i++){
            for(int j=0;j<3;j++){
                for(int k=0;k<3;k++){
                    for(int h=0;h<3;h++){
                         if(p[i]<h+j+k)continue;
                         dp[i][k][j]=max(dp[i][k][j],dp[i-1][h][k]+(p[i]-h-j-k)/3+h);
                    }
                }
            }
        }
        cout<<dp[m][0][0]<<endl;
        return 0;
    }
  • 相关阅读:
    测开之函数进阶· 第4篇《匿名函数》
    函数进阶· 第3篇《常用内置函数filter()、map()、zip(),怎么用的呢?》
    测开之函数进阶· 第1篇《递归函数》
    测开之数据类型· 第4篇《迭代器、生成器》
    数据类型· 第1篇《元组和列表的性能分析、命名元组》
    Appium上下文和H5测试(二)
    聊聊「测试分工和测试时间」
    Ui Automator 框架和Ui Automator Viewer你会用吗?附送「必备adb命令」拿走不谢 !
    使用Typora+PicGo配置Gitee图床
    持续集成有什么好处?快来看鸭
  • 原文地址:https://www.cnblogs.com/czy-power/p/10582479.html
Copyright © 2011-2022 走看看