汪柏轶


私信TA

用户名:wby0124

访问量:1907

签 名:

用时间取得的东西,时间会为其作证。

等  级
排  名 13069
经  验 943
参赛次数 0
文章发表 6
年  龄 13
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

注意事项:

参考代码:

很显然,每秒钟有三种dp状态:走路,闪烁,休息,如果将闪烁和休息练成一个dp,即算出每分钟存用法术可以走的最远距离,最后在用走路的来更新,即可得到答案

设dp[i]表示第i分钟可以走到的最远距离

若使用法术,dp[i]=dp[i-1]+60; 若休息,dp[i]=dp[i-1]; 若走路dp[i]=dp[i-1]+17;


Code:


#include<bits/stdc++.h>

using namespace std;

int dp[300001];

int main()

{

    int T,M,S;

    cin>>M>>S>>T;

    //法术跑步分开处理

    for(int i=1;i<=T;i++)

    {

        if(M>=10)

        {

            dp[i]=dp[i-1]+60;

            M-=10;

        }

        else

        {

            dp[i]=dp[i-1];

            M+=4;

        }

    }

    for(int i=1;i<=T;i++)

    {

        dp[i]=max(dp[i],dp[i-1]+17);

    }

    for(int i=1;i<=T;i++)

    {

        if(dp[i]>=S)

        {

            cout<<"Yes"<< endl;

            cout<<i<< endl;

            return 0;

        }

    }

    cout<<"No"<< endl;

    cout<<dp[T]<< endl;

    return 0;

}  


 

0.0分

2 人评分

  评论区

  • «
  • »