摔手机

#include <bits/stdc++.h>
using namespace std;
///dp[i][j]表示在第i层还有j个手机,摔了dp[i][j]次
const int maxn=1001;
int dp[maxn][10];
int m,n;
int main()
{
    for(int i=1;i<=1000;i++)
    {
        dp[i][1]=i;
    }
    for(int i=1;i<=1000;i++)
    {
        for(int j=2;j<=3;j++)
        {
            dp[i][j]=1+max(dp[i-1][j-1],dp[i-1][j]);//最坏的策略
            for(int k=1;k<=i;k++)
            {
                dp[i][j]=min(dp[i][j],max(dp[k-1][j],dp[i-k][j-1])+1);
            }
        }
    }
    printf("%d",dp[1000][3]);
    return 0;
}

 

posted @ 2019-05-21 17:20  -Asurada-  阅读(175)  评论(0编辑  收藏  举报