小明得到了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
小明想知道中大于等于的数最多能有多少个?
思路:找规律,可以证明k,k+1,k,k+1...为最优序列
代码
1 #include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 int main() 5 { 6 int n,k,ans; 7 scanf("%d %d",&n,&k); 8 ans = n/(2*k+1); 9 ans *= 2; 10 if(n%(2*k+1)>=k) 11 ans++; 12 printf("%d\n",ans); 13 return 0; 14 } ~