zoukankan      html  css  js  c++  java
  • 试题 历届试题 对局匹配

    http://lx.lanqiao.cn/problem.page?gpid=T454

    题解:

    对于K,我们分为K组,对于每一组的任何两个相邻的数,控制他们的间隔为k,

    比方说k=3,那么我们可以分为3组。

    0,3,6,9....

    1,4,7,10...

    2,5,8,11...

    这样就可以连续的保存任意个数,而且每一组的间隔为k。

    然后再把每个数出现的次数保存一下,接下来就可以做dp了

    即对于第i组的第j个数,dp[j]=max(dp[j-1],dp[j-2]+val[j]);

    code:

    #include<bits/stdc++.h>
    using namespace std;
    const int MAX_k=100005;
    const int N=100005;
    int dp[N];
    int arr[N];
    int num[N];
    int val[N];
    bool mark[N];
    int main(){
        int n,k;
        cin>>n>>k;
        for(int i=1;i<=n;i++) {
            cin>>arr[i];
            num[arr[i]]++;
        }
        int ans=0;
        if(k==0) {
            for(int i=1;i<=n;i++){
                if(!mark[arr[i]]) ans++;
                mark[arr[i]]=1;
            }
            cout<<ans<<endl;
        }
        else {
            for(int i=0;i<k;i++){
                int m=1;
                for(int j=i;j<=MAX_k;j+=k) val[m++]=num[j];
                dp[1]=val[1];
                for(int j=2;j<m;j++)   dp[j]=max(dp[j-1],dp[j-2]+val[j]);
                ans+=dp[m-1];
            }
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    c copy
    IfcVertexLoop
    qt windeployqt 日志
    IfcPolyLoop
    IfcEdgeLoop
    IfcLoop
    QTableWidget
    QList删除元素
    matlab X的负次方函数绘制2
    matlab X的负次方函数绘制1
  • 原文地址:https://www.cnblogs.com/Accepting/p/13783121.html
Copyright © 2011-2022 走看看