[DP]tvvj1023 奶牛的锻炼

思考

首先鄙人在这个题目上面思考的状态方程是 dp[i][1]表示第i分钟能跑的情况下最大路程 dp[i][0]表示第i分钟不能跑情况下的最大路程。但是在思考片刻之后发现有疲劳度的限制,所以这个方程没有办法产生联系。

在思考许久无果的情况下,跑去偷偷看了一下题解。

dp方程为 dp[i][j] i分钟j疲劳度的情况下最大距离

这不难推出

我们假设他们在跑步 dp方程为 dp[i][j] = max (dp[i-1][j-1]+距离[i],dp[i][j])

在休息时有两种情况 第一是j为0的情况下继续休息 第二个是j刚刚从m减少到0 的时间 前提是i>=j

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

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

代码实现

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,x,t,ans,d[2001],f[2001][501];
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>d[i];
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++){
    f[i][j]=max(f[i-1][j-1]+d[i],f[i][j]);
    if(i-j>=0)
    f[i][0]=max(f[i-j][j],f[i][0]);
    f[i][0]=max(f[i-1][0],f[i][0]);
    }
    cout<<f[n][0];
return 0;
}

AC代码

时间: 2024-12-21 17:47:58

[DP]tvvj1023 奶牛的锻炼的相关文章

TYVJ 1023 奶牛的锻炼(DP)

P1023 奶牛的锻炼 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO 描述 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息.若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0).若她在第i分钟休息,则疲倦程度减少1.无论何时,疲倦程度都不能超过M.另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步.在第N分钟后,她的疲倦程度必须为0. 输入格式 第一行,两个整数,代表N和M.接下来N行,每行一个整数,代

TYVJ P1023 奶牛的锻炼 Label:dp

背景 USACO 描述 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息.若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0).若她在第i分钟休息,则疲倦程度减少1.无论何时,疲倦程度都不能超过M.另外,一旦她开始休息,只有当疲惫程度减为0时才能重新开始跑步.在第N分钟后,她的疲倦程度必须为0. 输入格式 第一行,两个整数,代表N和M.接下来N行,每行一个整数,代表D_i. 输出格式 Bessie想知道,她最多能跑的距离. 测试样例1 输入 5 2 5 3 4 2 10

[Usaco2008 Mar]Cow Travelling游荡的奶牛[简单DP]

Description 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草.Farmer John在某个时刻看见贝茜在位置 (R1, C1),恰好T (0 < T <= 15)秒后,FJ又在位置(R2, C2)与贝茜撞了正着. FJ并不知道在这T秒内贝茜是否曾经到过(R2, C2),他能确定的只是,现在贝茜在那里. 设S为奶牛在T秒内从(R1, C1)走到(R2, C2)所能选择的路径总数,F

DP 动态规划初识

前面的 HMM 中参数求解, 都会用到动态规划, 全是各种概率公式, 是有一些抽象, 今天决定举个一波简单的栗子, 帮助理解DP 把一个大问题,不断划分为更小的子问题来求解的这种方式, 就是动态规划. 这是最为直观和通俗的理解. DP vs 递归 我之前也是经常把 DP 和递归弄混淆. 递归, 其实就是, 函数调用自身. 在某种程度上来说, 递归和DP有其相似性. 我的理解是, DP 降低了 递归 的时间复杂度, 具体说, DP解决了递归的重复子问题计算(overlap) 问题. 为了说明其问题

【POJ - 2387】Til the Cows Come Home(最短路径 Dijkstra算法)

Til the Cows Come Home 大奶牛很热爱加班,他和朋友在凌晨一点吃完海底捞后又一个人回公司加班,为了多加班他希望可以找最短的距离回到公司.深圳市里有N个(2 <= N <= 1000)个公交站,编号分别为1..N.深圳是大城市,公交车整天跑跑跑.公交站1是大奶牛的位置,公司所在的位置是N.所有公交站中共有T (1 <= T <= 2000)条双向通道.大奶牛对自己的导航能力不太自信,所以一旦开始,他总是沿着一条路线走到底.大奶牛为了锻炼未来的ACMer,决定让你帮

BZOJ 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛( dp )

树形dp..水 ------------------------------------------------------------------------ #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #define rep( i , n ) for( int i = 0 ; i < n ; i++ ) #define clr( x , c )

BZOJ1616[Usaco2008 Mar]Cow Travelling游荡的奶牛 dp

Description 奶牛们在被划分成N行M列(2 <= N <= 100; 2 <= M <= 100)的草地上游走,试图找到整块草地中最美味的牧草.Farmer John在某个时刻看见贝茜在位置 (R1, C1),恰好T (0 < T <= 15)秒后,FJ又在位置(R2, C2)与贝茜撞了正着. FJ并不知道在这T秒内贝茜是否曾经到过(R2, C2),他能确定的只是,现在贝茜在那里. 设S为奶牛在T秒内从(R1, C1)走到(R2, C2)所能选择的路径总数,F

BZOJ_1616_[Usaco2008_Mar]_Cow_Travelling_游荡的奶牛_(DP)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1616 给出一张图,有些点不能走,给出起始点和结束点,以及时间,求在该时间到达结束点的方案数. 分析 直接DP即可. \(f[i][j][k]\)表示在\(i\)时间走到\((j,k)\)的方案数. 在\(i\)时间从点\((a,b)\)走到\((c,d)\): \(f[i][c][d]+=f[i-1][a][b]\). 1 #include <bits/stdc++.h> 2 using

【BZOJ1231】[Usaco2008 Nov]mixup2 混乱的奶牛 状压DP

开始刷奶牛T... 状压DP. f[i][j] 状态为j插入i在结尾的奶牛数,不要吝啬用括号... 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 int v[50010]; 6 int n,m,d,l,ans; 7 int main() 8 { 9 scanf("%d%d%d%d",&n,&m,&