積分差恰好是k的兩名使用者會匹配。
如果兩人分差小於或大於k,系統都不會將他們匹配。
**共有n名使用者,以及他們的積分分別是a1, a2, ... an。
但是系統卻一場對局都匹配不起來(任意兩名使用者積分差不等於k)?
類似01揹包的dp
特判k==0的情況,輸出數字的種類
其餘情況把數字放入這個數除以k的餘數對應的堆
對於每一堆內的元素,選這個元素當且僅當不選上乙個元素
所以就是dp[j]=max(dp[j-1],dp[j-2]+cnt[j]),
j代表第j個元素,cnt[j]代表第j個元素的個數
現在學揹包類的dp是不是有點晚
然而我現在最菜的就是dp了
val陣列將數字壓縮到一起,從而模擬vector的寫法
但模擬希爾排序一樣跳躍訪問的寫法也要求會寫,
每次將dp[0]賦初值,迴圈利用dp陣列的寫法,都很值得學習
dp**不長,但大都很考驗思維,雞鴨油!
不會的時候及時看題解,題解裡有很多值得借鑑的寫法,揹著敲就是了
#include#include#include#include#includeusing namespace std;
const int maxn=1e5;
int n,k,v;
int dp[maxn+5],cnt[maxn+5];
int val[maxn+5],num;
int ans;
int main()
else
}for(int i=mx-k+1;i<=mx;++i)
ans+=dp[i];
return ans; }}
int main()
printf("%d\n",solve(k==0));
return 0;
}
對局匹配(藍橋杯)
小明發現 的自動對局系統在匹配對手時,只會將積分差恰好是k的兩名使用者匹配在一起。如果兩人分差小於或大於k,系統都不會將他們匹配。現在小明知道這個 總共有n名使用者,以及他們的積分分別是a1,a2,an。第一行包含兩個個整數n和k。第二行包含n個整數a1,a2,an。對於30 的資料,1 n 10 ...
對局匹配 藍橋真題(dp)
問題描述 輸入格式 第一行包含兩個個整數n和k。第二行包含n個整數a1,a2,an。對於30 的資料,1 n 10 對於100 的資料,1 n 100000,0 ai 100000,0 k 100000 輸出格式 乙個整數,代表答案。樣例輸入 10 0 1 4 2 8 5 7 1 4 2 8 樣例輸...
藍橋杯 對局匹配 動態規劃
時間限制 1.0s 記憶體限制 256.0mb 問題描述 輸入格式 第一行包含兩個個整數n和k。第二行包含n個整數a1,a2,an。對於30 的資料,1 n 10 對於100 的資料,1 n 100000,0 ai 100000,0 k 100000 輸出格式 乙個整數,代表答案。樣例輸入 10 0...