codeforces 735C. Tennis Championship(贪心)
题目链接 http://codeforces.com/contest/735/problem/C
题意:给你一个数n表示有几个人比赛问最多能赢几局,要求两个比赛的人得分不能相差超过1即得分为2的只能和得分为3,1的比赢一局
得一分。
由题意可得得分为i的人最少由最少的得分为i-1与i-2的人比赛得到所以我们设dp[i]表示得分为i的最少比赛人是多少
所以dp[i]=dp[i-1]+dp[i-2]只要(dp[i - 1]<=n<dp[i])那么结果就是i-1。
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
const int M = 110;
ll dp[M];
int main() {
ll n;
cin >> n;
int ans = 0;
dp[1] = 2;
dp[0] = 1;
for(int i = 2 ; i <= M - 1 ; i++) {
dp[i] = dp[i - 1] + dp[i - 2];
}
for(int i = 1 ; i <= M - 1 ; i++) {
if(n < dp[i] && n >= dp[i - 1]) {
ans = i - 1;
break;
}
}
cout << ans << endl;
return 0;
}

浙公网安备 33010602011771号