題目描述
小明得到了n個石頭,他想把這些石頭分成若幹堆,每堆至少有一個石頭。他把這些石堆排在一條直線上,他希望任意相鄰兩堆的石頭數都不一樣。小明最後的得分為石頭數大于等于k的石堆數,問他最多能得多少分。
嚴格地,小明把n個石頭分成了m堆,每堆個數依次為a1,a2…..,am。要求滿足:
1、ai≥1(1≤i≤m)
2、ai≠ai+1(1≤i<m)
3、a1+a2+…+am=n
小明想知道中大于等于的數最多能有多少個?
輸入
輸入兩個數n, k。
樣例輸入
5 1
輸出
輸出最大的得分
樣例輸出
3
時間限制
C/C++語言:1000MS其它語言:3000MS
記憶體限制
C/C++語言:65536KB其它語言:589824KB
Solution
題目給出了分堆規則,推導出最佳的分堆政策。要點是,相鄰的點不同數量的石頭,石頭數大于k才得分,計算最多能得多少分。最佳分堆政策是:k,k+1,k,K+1,是以得分數為n/(2k+1)*2,如果餘數大于等于k,則得分數再加一。
#include<iostream>
using namespace std;
int main(){
int n,k,res;
cin>>n>>k;
res=n/(*k+)*;
if(n%(*k+)>=k) res++;
cout<<res<<endl;
}