• 对局匹配


    刚开始直接拿set录数据做,以为是个水题,没想到WA了,只得了12分

    WA代码:

    #include <stdio.h>
    #include <memory.h>
    #include <math.h>
    #include <string>
    #include <string.h>
    #include <vector>
    #include <set>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <map>
    
    #define I scanf
    #define OL puts
    #define O printf
    #define F(a,b,c) for(a=b;a<c;a++)
    #define FF(a,b) for(a=0;a<b;a++)
    #define FG(a,b) for(a=b-1;a>=0;a--)
    #define LEN 3000
    #define MAX 0x06FFFFFF
    #define V vector<int>
    
    using namespace std;
    
    int main(){
    //    freopen("D:/CbWorkspace/blue_bridge/对局匹配.txt","r",stdin);
        int N,K,i,t,ans=0;
        set<int> s;
        I("%d %d",&N,&K) ;
        FF(i,N){
            I("%d",&t);
            if(s.find(t)==s.end()){
                s.insert(t+K);
                s.insert(t-K);
                ans++;
            }
        }
        printf("%d
    ",ans);
        return 0;
    }
    View Code

    看了大佬的代码,终于知道原来是dp。只要思路对,一切都不是问题。

    搬运自大佬博客:

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    #define MAX_SCORE 100000
    const int maxn = 100000 + 5;
    int cnt[MAX_SCORE+5], val[maxn], dp[maxn];
    int n, k;
    
    int main() {
        while(scanf("%d%d", &n, &k) == 2) {
            memset(cnt, 0, sizeof(cnt));
            int score, ans = 0;
            for(int i = 1; i <= n; i++) {
                scanf("%d", &score);
                cnt[score]++;
            }
            //特殊处理k=0的情况
            if(k == 0) {
                for(int i = 0; i <= MAX_SCORE; i++) {
                    if(cnt[i]) ans++;
                }
            } 
            else {
                for(int i = 0; i < k; i++) {
                    int m = 0;
                    for(int j = i; j <= MAX_SCORE; j+=k) {
                        val[m++] = cnt[j];
                    }
                    dp[0] = val[0];
                    for(int j = 1; j < m; j++) {
                        if(j == 1) dp[j] = max(dp[0], val[j]);
                        else dp[j] = max(dp[j-2] + val[j], dp[j-1]);
                    }
                    ans += dp[m-1];
                }
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    error: readline/readline.h: No such file or directory
    ImportError: No module named setuptools
    ImportError: No module named argparse
    为python安装pip
    yum源安装配置
    n元一维向量向左循环移位i的几种算法
    以空间换时间编程策略的细节问题以及解决方案
    Hash(散列函数)简单应用引出解决散列冲突的四种方法
    随机取样
    排序问题
  • 原文地址:https://www.cnblogs.com/TQCAI/p/8458721.html
Copyright © 2020-2023  润新知