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行,每行一个整数,代表D_i。

输出格式

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

测试样例1

输入

5 2 




10

输出

9

备注

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

题目用DP来做

dp[i][j]代表第i分钟的疲劳度为j

在第i分钟的时候有休息和跑步两种状态:

跑步:

dp[i][j]=dp[i-1][j-1]+a[i]

休息:

dp[i][0]=dp[i-1][0]  上一分钟在休息

dp[i][0]=dp[i-j][0] 前j分钟一直在休息

dp[i][0]=dp[i-j][j]  休息到第i分钟就结束了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stdlib.h>
#include<algorithm>
#define LL __int64
using namespace std;
const int MAXN=2000+5;
int a[MAXN],dp[MAXN][MAXN];
int main()
{
    //freopen("in.txt","r",stdin);
    int n,m;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
    {
        dp[i][0]=dp[i-1][0];
        for(int j=1;j<=m&&i-j>=0;j++)
            dp[i][0]=max(dp[i][0],max(dp[i-j][0],dp[i-j][j]));
        for(int k=1;k<=m;k++)
            dp[i][k]=dp[i-1][k-1]+a[i];
    }
    printf("%d",dp[n][0]);
    return 0;
}

时间: 2024-12-28 21:43:54

TYVJ 1023 奶牛的锻炼(DP)的相关文章

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

Tyvj P1015 公路乘车 (DP)

 描述 Description 一个特别的单行街道在每公里处有一个汽车站.顾客根据他们乘坐汽车的公里使来付费.例如样例的第一行就是一个费用的单子. 没有一辆车子行驶超过10公里,一个顾客打算行驶n公里(1<=n<=100),它可以通过无限次的换车来完成旅程.最后要求费用最少. 输入格式 InputFormat 第一行十个整数分别表示行走1到10公里的费用(<=500).注意这些数并无实际的经济意义,即行驶10公里费用可能比行驶一公里少. 第二行一个整数n表示,旅客的总路程数. 输出格

[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的情况

【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,&

tyvj 1056 能量项链 区间dp (很神)

P1056 能量项链 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2006 提高组 第一道 描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记.因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量.如果

bzoj1231[Usaco2008 Nov]mixup2 混乱的奶牛(状压dp)

1231: [Usaco2008 Nov]mixup2 混乱的奶牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1032  Solved: 588[Submit][Status][Discuss] Description 混乱的奶牛 [Don Piele, 2007] Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S_i <= 25,000). 奶牛为她们的编号感到骄傲

BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会( dp + dfs )

选取任意一个点为root , size[ x ] 表示以 x 为根的子树的奶牛数 , dp一次计算出size[ ] && 选 root 为集会地点的不方便程度 . 考虑集会地点由 x 点向它的子节点 son 转移 , 那么以 son 为集会地点比以 x 为集会地点要多 dist( x , son ) * ( tot - size[ x ] ) - dist( x , son ) * size[ x ] = dist( x , son ) * ( tot - 2 * size[ x ] )

BZOJ 1708: [Usaco2007 Oct]Money奶牛的硬币( dp )

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

B1231 [Usaco2008 Nov]mixup2 混乱的奶牛 状压dp

发现是状压dp,但是还是不会...之前都白学了,本蒟蒻怎么这么菜,怎么都学不会啊... 其实我位运算基础太差了,所以状压学的不好. 题干: Description 混乱的奶牛 [Don Piele, 2007] Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S_i <= 25,000). 奶牛为她们的编号感到骄傲, 所以每一头奶牛都把她的编号刻在一个金牌上, 并且把金牌挂在她们宽大的脖子上. 奶牛们对在挤奶的时候被排成一