日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[蓝桥杯][2017年第八届真题]对局匹配

發(fā)布時間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [蓝桥杯][2017年第八届真题]对局匹配 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述

小明喜歡在一個圍棋網(wǎng)站上找別人在線對弈。這個網(wǎng)站上所有注冊用戶都有一個積分,代表他的圍棋水平。
小明發(fā)現(xiàn)網(wǎng)站的自動對局系統(tǒng)在匹配對手時,只會將積分差恰好是K的兩名用戶匹配在一起。如果兩人分差小于或大于K,系統(tǒng)都不會將他們匹配。
現(xiàn)在小明知道這個網(wǎng)站總共有N名用戶,以及他們的積分分別是A1, A2, … AN。
小明想了解最多可能有多少名用戶同時在線尋找對手,但是系統(tǒng)卻一場對局都匹配不起來(任意兩名用戶積分差不等于K)?

題解:

我們可以按照要求將分數(shù)分成不同組,同組內(nèi)的數(shù)據(jù)相鄰元素差值為k。例如樣例2

10 1 2 1 1 1 1 4 4 3 4 4

我們可以分出一組(1,2,3,4)
這樣的目的是為了便于選取,因為相鄰元素差值為k,所以我們就可以進行跳躍式選取,也就是如果當前決定第i位的值,我們可以選擇選取第i位,這樣就從第i-2位的情況加上第i位的情況,也可以不選,這樣答案就是繼承第i-1位,那當前,這樣就成了dp問題
dp(i)=max{dp(i?1),dp(i?2)+ai}
我們將原數(shù)據(jù)可以分為好幾組,求出每組的最大值,然后最后累加即可
這是一個很巧妙的思維,可以慢慢理解

代碼:

/* 10 2 2 1 1 1 1 4 4 3 4 4 0 2 4 1 3 */ #include<bits/stdc++.h> using namespace std; const int maxn=1e5+8; const int MAX=100000; int cnt[maxn]; int val[maxn]; int dp[maxn]; int main(){int n,k;cin>>n>>k;int ans=0;for(int i=1;i<=n;i++){int x;cin>>x;cnt[x]++;}if(k==0){for(int i=0;i<=MAX;i++){if(cnt[i])ans++;}}else {for(int i=0;i<k;i++){int sum=0;for(int j=i;j<=MAX;j+=k){val[sum++]=cnt[j];}dp[0]=val[0];dp[1]=max(val[1],dp[0]);for(int j=2;j<sum;j++){dp[j]=max(dp[j-2]+val[j],dp[j-1]);}ans+=dp[sum-1];}}cout<<ans<<endl;return 0; }

總結(jié)

以上是生活随笔為你收集整理的[蓝桥杯][2017年第八届真题]对局匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。