十五月明


私信TA

用户名:dotcpp0605328

访问量:5439

签 名:

等  级
排  名 319
经  验 5465
参赛次数 0
文章发表 87
年  龄 18
在职情况 学生
学  校 曲阜师范大学
专  业 人工智能

  自我简介:

Easy

解题思路:

注意事项:说实话没怎么看懂!

参考代码:

#include <iostream>

using namespace std;

int main()

{    //d[i]代表第i分钟可以跑的路程

    //dp[n][m][0]代表第n分钟疲倦度为m且正在跑的路程,dp[n][m][1]就是休息时

    int n,m,dp[10001][501][2]={0};

    cin>>n>>m;

    int d[n];

    for(int i=1;i<=n;i++)cin>>d[i];

    

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

        for(int j=0;j<=m;j++)

        {

            if(j==0)//j=0,那我必须运动哈

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

            //dp[i-1][j+1][1]上一分钟,疲惫度为1,一直休息下来

            //dp[i-1][j+1][0]上一分钟,疲惫度为1,正在运动,现在休息下来

            //dp[i-1][j][0]上一分钟的同种情况

            else if(j==m)

            {

                dp[i][j][1]=dp[i-1][j-1][0]+d[i];

                //疲倦度满时只可能从上一分钟跑来的

            }

            else

            {

                dp[i][j][1]=max(dp[i-1][j+1][1],dp[i-1][j+1][0]);//选择休息

                //从上一分钟休息来的

                dp[i][j][0]=dp[i-1][j-1][0]+d[i];//选择运动

                //从上一分钟跑来的

            }

        }

    cout<<dp[n][0][0];

}


 

0.0分

3 人评分

  评论区

  • «
  • »