题目链接 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; }