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;
}

posted @ 2016-11-29 00:31  Gealo  阅读(488)  评论(0编辑  收藏  举报