奶牛的锻炼-线性dp

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

题目地址:http://acm.qust.edu.cn/problem.php?id=1782

题目描述

奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的疲倦程度必须为0。

输入

第一行,两个整数,代表N和M。 接下来N行,每行一个整数,代表D_i。

N <= 10000 , M <= 500 , D_i <= 1000

输出

Bessie想知道,她最多能跑的距离。

样例输入

5 2
5
3
4
2
1 0

样例输出

9

解题思路

第i秒可以选择走或者休息,如果走,就需要第i-1秒疲劳值不满,这时候第i秒的长度就是第i-1秒的值加上能走的长度,但不满有0~m-1种可能,这时候需要选择第i-1秒时候,疲劳值为0~m-1中长度最长的那个。保证子问题最优。如果休息,第i秒的最大长度只能等于休息前的长度。休息的话,还有一是休息0~m-1种可能秒,从里面找一个最大maxn的;二是一直疲劳值为零了还休息。这种情况得到的值和上一情况的maxn比较取最大。


代码

#include<cstdio>
#include<iostream>
using namespace std;

int f[10010][510],a[10010];//第i秒疲劳值为j时走的最大路程。

int main()
{

    int n,m,i,j,k;

    scanf("%d%d",&n,&m);

    for(i=1;i<=n;++i)
        scanf("%d",&a[i]);

    for(i=1;i<=n;++i)
    {
        //选择跑
        for(j=0; j<=m&&j<=i; ++j)//j<=i疲劳值不可能超过一直跑所获得的疲劳,最长不下降子序列也是要在当前位置之前去找最大
        {
            f[i][j]=max(f[i][j],f[i-1][j-1]+a[i]);
//上面这句话是循环找上一秒各个不同疲劳时的最大值,类比于最长不下降子序列,就是找之前比他数值小的中最长的一个
            //实际上等于
            //if(f[i][j]<f[i-1][j-1]+a[i])
            //f[i][j]=f[i-1][j-1]+a[i];
        }
        f[i][0]=f[i-1][0];//第i秒疲劳值为零有两种情况,一是一直在休息
       // 二是第i-k秒休息了k秒后疲劳值到0了,然后不休息了
       int k;//k表示休息了几秒
       for(k=1;k<=m&&k<=i;++k)//第i秒的时候不可能休息超过了i秒
       {
           f[i][0]=max(f[i][0],f[i-k][k]);
       }
    }

    printf("%d",f[n][0]);
    return 0;
}


DP专题练习题解 Contents:奶牛锻炼 Description Input Output exerin exerout Hint Solution 2雷涛的小猫 Description Input Output catin catout Hint Solution 3不等数列 Description Input Output seqin seqout Hint Solution 4清理垃圾 Descripti 阅读详情

相关推荐

奶牛锻炼

【题目描述】 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的疲倦程度必须为0。 【输入格式】 第一行,两个整数,代表N和M。 接...

241

tyvj 1023 奶牛锻炼

奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的

kongming_acm的专栏 1364

[线性DP]奶牛锻炼

题目描述 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的疲倦程度必须为0。 输入 第一行,两个整数,代表N和M。 接下来N行,每行一个整数,代表D_

soundwave_的博客 1014

奶牛跑步》 题解

动态规划的要素与动机

S_et_HKD的博客 602

线性DP总结

顺序 1.Mr.Youngs Picture Permutations 2.LCIS 3.修路Making the Grade 4.Mobile Service 5.传纸条 6.I-country 7.Cookies 8.逆序对数列 9.乌龟棋 持续更新中…… 第一次更新,复制了题目 1. Mr.Youngs Picture Permutations 题目描述 杨老师希望给他的班级拍一...

星暗宇的博客 511

BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP

BZOJ_2097_[Usaco2010 Dec]Exercise 奶牛健美操_二分答案+树形DP Description Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的小路上奔跑。这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径。简单的说来, 这些点的布局就是一棵树,且每条边等长,都为1。 对于给定的...

118

[洛谷]P1353 [USACO08JAN]跑步Running (#线性dp)

题目描述 The cows are trying to become better athletes, so Bessie is running on a track for exactly N (1 ≤ N ≤ 10,000) minutes. During each minute, she can choose to either run or rest for the whole minu...

A.pro的博客 336

[线性DP]机器分配

题目描述 某总公司拥有高效生产设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为总公司提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。 分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总设备数M。其中M 输入 第一行为两个整数M,N。接下来是一个N×M的矩阵,其中矩阵的第i行的第j列的数Aij表明第i个公司分配j台机器的盈

soundwave_的博客 760

BZOJ 2097 USACO 2010 Dec Gold Exercise 奶牛健美操 二分答案 树形DP 贪心

感觉跟BZOJ 2067 POI 2004 szn有点关联。 二分答案ans。 对于每个点,如果子树中存在超过ans的链就砍掉。剩余的差不多了。#include <cstdio> #include <algorithm> const int N = 100005, M = N * 2; using namespace std; int e = 0, h[N], v[M], p[M], mid,

とある黄鱼のOIブログ 1167

[Usaco2010 Dec]Exercise 奶牛健美操

[Usaco2010 Dec]Exercise 奶牛健美操 题目 Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的小路上奔跑。这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径。简单的说来, 这些点的布局就是一棵树,且每条边等长,都为1。 对于给定的一个奶牛路径集合,精明的奶牛们会计算出任意点对路径的最...

weixin_30518397的博客 94

题解:洛谷 P1353 [USACO08JAN] Running S

题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行。在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息。输出一个整数,表示在满足所有限制条件的情况下,贝茜能跑的最大距离。贝茜的体力限制了她跑步的距离。,否则她将没有足够的精力来对付这一整天中剩下的事情。如果贝茜选择休息,那么她的疲劳度就会每分钟减少。分钟的锻炼结束时,贝茜的疲劳度也必须恢复到。米,并且她的疲劳度会增加。

团爸讲算法 269

补题赛(5.20)

在每个路口,都有一个开关决定着出去的轨道,每个开关都有一个默认的状态,每辆电车行驶到路口之后,只能从开关所指向的轨道出去,如果电车司机想走另一个轨道,他就必须下车切换开关的状态。比如当N=3时,就有{1-2,1-3}{1-2,2-3}{1-3,1-2}{1-3,2-3}{2-3,1-2}{2-3,1-3}六种不同的打架过程。第一行有3个整数2<=N<=100,1<=A,B<=N,分别表示路口的数量,和电车的起点,终点。输出只有一个数字,表示从A到B所需的最少的切换开关次数,若无法从A前往B,输出-1。

weixin_74038026的博客 298

TYVJ 1023 奶牛锻炼(DP)

P1023奶牛锻炼 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO 描述 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫...

246

C语言奶牛锻炼

描述 Description 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的疲倦程度必须为0。输入格式 Input Format Bessie想

无知而狂妄 933

USACO //P1023 奶牛锻炼

<br /> <br />From Vivian Snow☆奶牛锻炼        背景 Background  USACO<br />       描述 Description  奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的疲倦程度必须为0。<br />       输入

hqd_acm的专栏 1981

DP练习 - 奶牛锻炼

题目描述 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步。在第N分钟后,她的疲倦程度必须为0。 输入 第一行,两个整数,代表N和M。接下来N行,每行一个整数,代表D_i。 输出

Shiina Mashiro no youni 1340

奶牛锻炼

1782: 奶牛锻炼 时间限制: 1 Sec  内存限制: 128 MB 提交: 43  解决: 11 [提交][状态][讨论版] 题目描述 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息。若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0)。若她在第i分钟休息,则疲倦程度减少1。无论何时,疲倦程度都不能超过M。另外,一旦她开始休息,只有当疲惫程度减为0时

jn_8316的博客 634
上一篇: 最长公共子序列-dp
下一篇: 机器分配-分组背包&&线性动态规划
lyyy.
博客等级 码龄11年 168粉丝 236原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值