P1023 奶牛的锻炼
时间: 1000ms / 空间: 131072KiB / Java类名: Main

背景

USACO

描述

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

输入格式

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

输出格式

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

测试样例1

输入

5 2 




10

输出

9

备注

N <= 2000 , M <= 500 , D_i <= 1000
Vivian Snow
广东汕头聿怀初级中学NOIp第一次训练用题
 

 
用f(i,j)表示第i分钟结束,疲劳值为j的最远距离
有三种转移的情况:
1.这分钟跑动,即F[I,J]:=F[I-1,J-1]+D[I];
2.上一分钟已经歇息到0了,但这一分钟我不跑,依然歇息,即:F[I,0]:=F[I-1,0];
3.这一分钟在歇息,从前面的某一个时刻开始歇息,在这个时刻恰好歇息到0,这些时刻只能由F[I-K,K]转移到,枚举一个K,其中K<=I。
2和3情况转移到的状态是一个,需要取一个MAX。
即:
f(i,j)=max{f(i,j),f(i-1,j-1)+d(i)
f(i,0)=max{f(i,0),f(i-j,j)}
 
/*“一旦休息就必须等到疲劳为0”。

假设我们是用f[i][j]来表示i分钟j疲劳时的最大值。
这时,我定义只要在f数组里i!=0的值必然不是休息中的。

即 先把问题看做:奶牛不能休息,每次只能向前跑。第i分钟跑d[i]米。
那么就会有: f[i][j]=f[i-1][j-1]+d[i];
然后 在每次处理的时候 加上一句判断:
f[i+j][0]=max(f[i+j][0],f[i-1][j+1]);
也就是 一旦休息就直接归入f[?][0]的序列中 不带入一般的考虑 从而减轻思考负担

然后 到每分钟的f[i][0]时 可以这样去判断:
f[i][0]=max(f[i][0],f[i-1][0]); // 这句是因为题目漏洞
f[i][0]=max(f[i][0],f[i-1][1]);
上述题目漏洞为:奶牛在疲劳为0时,仍可休息,不降低疲劳。

*/
 
 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define inf 1000000000
using namespace std;
int n,m,d[];
int t=;
int f[][]; int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%d",&d[i]);
for(int i=;i<=n;i++)
{
f[i][]=f[i-][];
for(int j=;j<=m;j++)
{
f[i][j]=max(f[i][j],f[i-][j-]+d[i]);
if(j<=i)f[i][]=max(f[i][],f[i-j][j]);
}
}
cout<<f[n][];
puts("");
return ;
}

Q:为什么当前疲劳值小于当前时间就要休息

A:你从i-j分,疲劳度为j开始休息到i分,疲劳度才会变成0现在i-j好大于等于0

P1023 奶牛的锻炼的更多相关文章

  1. [TYVJ] P1023 奶牛的锻炼

    奶牛的锻炼 背景 Background USACO   描述 Description 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息.若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加 ...

  2. TYVJ P1023 奶牛的锻炼 Label:dp

    背景 USACO 描述 奶牛Bessie有N分钟时间跑步,每分钟她可以跑步或者休息.若她在第i分钟跑步,可以跑出D_i米,同时疲倦程度增加1(初始为0).若她在第i分钟休息,则疲倦程度减少1.无论何时 ...

  3. tyvj1023 - 奶牛的锻炼 ——DP

    题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1023 #include <cstdio> #include <algorithm> ...

  4. 动归专题QAQ(两天创造的刷题记录哟!✿✿ヽ(°▽°)ノ✿✿)(未填坑)

    1092 采药:由于没有限制开始时间和结束时间,01背包就好了 1095 开心的金明:01背包,无fuck说 1104 摆花:f[i][j]表示摆了i种花,第i种花摆了j种的方案数,乱转移0.0(感觉 ...

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

    Til the Cows Come Home 大奶牛很热爱加班,他和朋友在凌晨一点吃完海底捞后又一个人回公司加班,为了多加班他希望可以找最短的距离回到公司.深圳市里有N个(2 <= N < ...

  6. 奶牛健美操(codevs 3279)

    题目描述 Description Farmer John为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间 的小路上奔跑.这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点 ...

  7. BZOJ2097[Usaco2010 Dec] 奶牛健美操

    我猜我这样继续做水题会狗带 和模拟赛的题很像,贪心搞一下. #include<bits/stdc++.h> using namespace std; int read(){ ,f=;cha ...

  8. 【BZOJ】【1046】/【POJ】【3613】【USACO 2007 Nov】Cow Relays 奶牛接力跑

    倍增+Floyd 题解:http://www.cnblogs.com/lmnx/archive/2012/05/03/2481217.html 神题啊= =Floyd真是博大精深…… 题目大意为求S到 ...

  9. BZOJ 1706: [usaco2007 Nov]relays 奶牛接力跑

    Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们的日常锻炼项目.至于进行接力跑的地点 自然是在牧场中现有的T(2 <= T < ...

随机推荐

  1. ipc telnet 攻击

    ping %1 -n 2net use \\%1sc \\%1 config tlntsvr start= autosc \\%1 start tlntsvrtelnet %1

  2. Android little error records

    1:在清单文件(Manifest)中加入权限时要注意,如下例: <uses-permission android:name="android.permission.CHANGE_NET ...

  3. openerp 经典收藏 Openerp开发进销存系统完毕总结(转载)

    原文地址:http://blog.csdn.net/heartrude/article/details/9142463 Openerp开发进销存系统完毕总结 分类: 代码历程 OpenERP 工程思想 ...

  4. Python 初学——V_Rename(第一个完整的python程序)

    我在大一的时候就对python非常感兴趣,就是一直没有时间和机会去学习下,只是了解些表面的东西,今天早上整理电脑的时候发现文件夹里面的文件名是这样子的,有点小不舒服,特别想去除重复的"Str ...

  5. c语言知识点总结(摘自head first c)

    gcc name.c -o name;   ./name或者gcc name.c -o name &&  ./name;同时执行关键字:void sizeof(运算符,它能告诉你某样东 ...

  6. (转)《深入理解java虚拟机》学习笔记10——并发编程(二)

    Java的并发编程是依赖虚拟机内存模型的三个特性实现的: (1).原子性(Atomicity): 原子性是指不可再分的最小操作指令,即单条机器指令,原子性操作任意时刻只能有一个线程,因此是线程安全的. ...

  7. Android学习笔记:TabHost 和 FragmentTabHost(转)

    转自:http://www.cnblogs.com/asion/p/3339313.html   作者:Asion Tang   出处:http://asiontang.cnblogs.com   T ...

  8. 使用jquery控制只能输入数字,并且关闭输入法(转)

    控制文本框只能输入数字是一个很常见的需求,比如电话号码的输入.数量的输入等,这时候就需要我们控制文本框只能输入数字.在用js控制之后在英文输入法的状态下去敲击键盘上的非数字键是输不进去的,然而当你转到 ...

  9. maven学习心得整理

    maven的学习心得 已经接触了maven项目有一段时间了,开始时仅仅会使用,在使用中发现了它的强大和方便,于是决心研究一下: 首先,普及一下maven参数: -D:传入属性参数 -P:使用POM中指 ...

  10. vs2008调试提示:未安装Silverlight托管调试包

    换个启动浏览器,解决了. 右击项目,选择“属性”,选择"web";启动操作设置“启动外部程序”,填入浏览器exe的路径. 命令行参数填入地址.即可.