0
点赞
收藏
分享

微信扫一扫

测试次数--蓝桥杯(dp)

fbd4ffd0717b 2022-03-23 阅读 31

这道题很抽象 第一次见完全理解不了
现在终于有那么点理解了┭┮﹏┭┮

#include <iostream>

using namespace std;
int dp[5][1010];//用i部手机 测试j次确定耐摔指数
//确定耐摔指数:到楼顶没摔坏 或者 到i-1没摔坏 i摔坏
//先看dp[1][j]一部手机 摔到楼顶才能确定耐摔指数 最坏运气
//第一部手机坏了才能第二部手机
//前一部手机摔坏 换手机去楼上 前一部手机没摔坏 不换手机去楼下
int main()
{
    for(int i=1;i<=3;i++)
        for(int j=1;j<=1000;j++)
    {
        dp[i][j]=j;
    }
    for(int i=2;i<=3;i++)
        for(int j=1;j<=1000;j++)
          for(int k=1;k<j;k++)//k用于枚举当前层在哪个楼层
    {
        if(i<j)
        {
            //前一部手机坏了才能下一部手机
            //min求的是最佳策略
            //第多少层不重要 重要的是还有多少层 剩余的层数才是关键 因为最坏运气
            dp[i][j]=min(dp[i][j],max(dp[i-1][k-1],dp[i][j-k])+1);
        }
    }
    cout<<dp[3][1000];
    return 0;
}


举报

相关推荐

0 条评论