bzoj1613 / P1353 [USACO08JAN]跑步Running

P1353 [USACO08JAN]跑步Running

显然的dp

设$f[i][j]$表示进行到第$i$分钟时,$j$疲劳度下的最远距离,$d[i]$为第$i$分钟下能跑的距离

分类讨论

1.运动:显然$f[i][j]=max(f[i][j],f[i-1][j-1]+d[i])$

2.休息:我们枚举第$u(u<i)$分钟,休息到第$i$分钟时刚好疲劳度下降到$0$

显然$f[i][0]=max(f[i][0],f[i-u][u])$

注意疲劳度为$0$时仍可以继续休息,那么$f[i][0]=max(f[i][0],f[i-1][0])$

答案即为$f[n][0]$

复杂度$O(nm)$

end.

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cctype>
 5 #define re register
 6 using namespace std;
 7 void read(int &x){
 8     char c=getchar();x=0;
 9     while(!isdigit(c)) c=getchar();
10     while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
11 }
12 int max(int a,int b){return a>b?a:b;}
13 int min(int a,int b){return a<b?a:b;}
14 int n,m,d,f[10002][502];
15 int main(){
16     memset(f,128,sizeof(f)); f[0][0]=0;//初始最小化
17     read(n);read(m);
18     for(re int i=1;i<=n;++i){
19         read(d);//边读边做
20         f[i][0]=f[i-1][0];
21         for(re int j=min(m,i);j>=1;--j){//注意边界,倒序更新
22             f[i][j]=max(f[i][j],f[i-1][j-1]+d);
23             f[i][0]=max(f[i][0],f[i-j][j]);
24         }
25     }printf("%d",f[n][0]);
26     return 0;
27 }

原文地址:https://www.cnblogs.com/kafuuchino/p/9860712.html

时间: 2024-08-29 05:12:11

bzoj1613 / P1353 [USACO08JAN]跑步Running的相关文章

P1353 [USACO08JAN]跑步Running

P1353 [USACO08JAN]跑步Running 题目描述 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 minute. The ultimate distan

luogu P1353 [USACO08JAN]跑步Running

题目描述 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 minute. The ultimate distance Bessie runs, though, depe

Noip2016day1 天天爱跑步running

题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.?天天爱跑步?是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 个结点和 条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从到的连续正整数. 现在有个玩家,第个玩家的起点为 ,终点为  .每天打卡任务开始时,所有玩家在第秒同时从自己的起点出发, 以每秒跑一条边的速度, 不间断地沿着最短路径向着自己的终点跑去, 跑到终点后该玩家就算完成了打卡任务

【BZOJ1613】[Usaco2007 Jan]Running贝茜的晨练计划 DP

水DP. 设d[i][j]为i分钟疲劳为j f[i][j]=f[i-1][j-1]+f[i] f[i][0]=max(f[i-1][0], f[i-j][j]) 1 #include <iostream> 2 #include <cstdio> 3 #define N 10010 4 #define M 505 5 using namespace std; 6 int f[N][M],a[N]; 7 int n,m; 8 int main() 9 { 10 scanf("

bzoj1613[Usaco2007 Jan]Running贝茜的晨练计划*

bzoj1613[Usaco2007 Jan]Running贝茜的晨练计划 题意: 贝茜进行N分钟的晨跑.在每分钟的开始,贝茜会选择下一分钟是用来跑步还是休息,如果贝茜选择在第i分钟内跑步,她可以在这一分钟内跑Di米,并且她的疲劳度会增加 1.贝茜的疲劳度上限为M.如果贝茜选择休息,那么她的疲劳度就会每分钟减少1,但她必须休息到疲劳度恢复到0为止.在疲劳度为0时休息的话,疲劳度不会再变动.晨跑开始时,贝茜的疲劳度为0. 还有,在N分钟的锻炼结束时,贝茜的疲劳度也必须恢复到0.求贝茜最多能跑多少米

【动态规划】bzoj1613 [Usaco2007 Jan]Running贝茜的晨练计划

#include<cstdio> #include<algorithm> using namespace std; #define N 10001 int n,m,a[N],f[N][501]; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) scanf("%d",&a[i]); for(int i=1;i<=n;++i) { f[i][0]=

微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器

我的微信开发者工具 开篇语 好不容易,终于把所有的基础课程全部看完了!昨天,我很高兴地开始了看别人做的项目进行深度的学习.其实也说不上是项目吧,更多的像是一种给新手看的示例代码.然后我在这些代码上面进行我自己的改进.最后也就有了接下来我会给大家带来的这篇文章中的项目.这个项目是完整的,它包括了一个原本的示例代码中带着的莫名其妙的动画组件(可能是为了更多额展示微信小程序的控件体系)以及跑步的组件,还有我后来自己加上去的一个音乐播放组件.总共也就有了三个的功能:动画效果展示:跑步的定时以及定位功能:

poj 3661 Running(区间dp)

Description 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 minute. The ultimate distance Bessie runs, thoug

【POJ 3661】Running

Running Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5598   Accepted: 2102 Description 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