题目:110米栏,运动员能够用三种状态跑,1状态耗体力且跑得快,2状态不消耗体力,3状态恢复体力且跑得慢。

体力上限是M,且初始满体力,如今想知到最小的时间跑全然程。

分析:dp,全然背包。题目是一个物品体积可能为负数的背包,求背包就可以。

只是,由于物品体积可能是负数,所以无论哪个方向背包都有后效性,直接用二维避免后效性。

转移方程:F(i,j)= min(F(i-F1,j)+ T1,F(i-1,j)+ T2,F(i+F2,j)+T3)。

说明:(2011-09-19 01:23)。

#include <iostream>
#include <cstdlib> using namespace std; int F[ 111 ][ 111 ];
int T1[ 111 ];
int T2[ 111 ];
int T3[ 111 ];
int F1[ 111 ];
int F2[ 111 ]; int dp( int N, int M )
{
for ( int i = 0 ; i <= N ; ++ i )
for ( int j = 0 ; j <= M ; ++ j )
F[ i ][ j ] = 0xffffff; for ( int i = 0 ; i <= M ; ++ i )
F[ 0 ][ i ] = 0; for ( int i = 1 ; i <= N ; ++ i ) {
/* 第一状态 */
for ( int j = F1[ i ] ; j <= M ; ++ j )
if ( j <= M && F[ i ][ j-F1[ i ] ] > F[ i-1 ][ j ] + T1[ i ] )
F[ i ][ j-F1[ i ] ] = F[ i-1 ][ j ] + T1[ i ];
/* 第二状态 */
for ( int j = 0 ; j <= M ; ++ j )
if ( F[ i ][ j ] > F[ i-1 ][ j ] + T2[ i ] )
F[ i ][ j ] = F[ i-1 ][ j ] + T2[ i ];
/* 第三状态 */
for ( int j = 0 ; j <= M ; ++ j )
if ( F[ i ][ min(j+F2[ i ],M) ] > F[ i-1 ][ j ] + T3[ i ] )
F[ i ][ min(j+F2[ i ],M) ] = F[ i-1 ][ j ] + T3[ i ];
}
int Min = 0xffffff;
for ( int i = 0 ; i <= M ; ++ i )
if ( Min > F[ N ][ i ] )
Min = F[ N ][ i ];
return Min;
} int main()
{
int T,N,M;
while ( cin >> T )
while ( T -- ) {
cin >> N >> M;
for ( int i = 1 ; i <= N ; ++ i )
cin >> T1[ i ] >> T2[ i ] >> T3[ i ] >> F1[ i ] >> F2[ i ];
cout << dp( N, M ) << endl;
}
return 0;
}

zoj 2972 - Hurdles of 110m的更多相关文章

  1. ZOJ 2972 Hurdles of 110m 【DP 背包】

    一共有N段过程,每段过程里可以选择 快速跑. 匀速跑 和 慢速跑 对于快速跑会消耗F1 的能量, 慢速跑会集聚F2的能量 选手一开始有M的能量,即能量上限 求通过全程的最短时间 定义DP[i][j] ...

  2. zju 2972 Hurdles of 110m(简单的dp)

    题目 简单的dp,但是我还是参考了网上的思路,具体我没考虑到的地方见代码 #include<stdio.h> #include<iostream> #include<st ...

  3. TZOJ 1545 Hurdles of 110m(01背包dp)

    描述 In the year 2008, the 29th Olympic Games will be held in Beijing. This will signify the prosperit ...

  4. 【TOJ 1545】Hurdles of 110m(动态规划)

    描述 In the year 2008, the 29th Olympic Games will be held in Beijing. This will signify the prosperit ...

  5. ZOJ-2972-Hurdles of 110m(线性dp)

    Hurdles of 110m Time Limit: 2 Seconds      Memory Limit: 65536 KB In the year 2008, the 29th Olympic ...

  6. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  7. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

  8. QDU_组队训练(ABEFGHKL)

    A - Accurately Say "CocaCola"! In a party held by CocaCola company, several students stand ...

  9. 【转载】图论 500题——主要为hdu/poj/zoj

    转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

随机推荐

  1. 基于visual Studio2013解决C语言竞赛题之1022最大数最小数

         题目 解决代码及点评 /************************************************************************/ ...

  2. HTML - HTML Commonly Used Character Entities

    HTML Entities Some characters are reserved in HTML. It is not possible to use the less than (<) o ...

  3. 参考storm中的RotatingMap实现key超时处理

    storm0.8.1以后的RotatingMap完全可以独立于storm用来实现hashmap的key超时删除,并调用回调函数 RotatingMap.java: import java.util.H ...

  4. gdi+ 高速绘制透明窗体

    gdi+ 高速绘制透明窗体: 方法一: 1.用Iamge对象载入png资源, 2.调用drawimage函数讲图片绘制出了 3.UpdateLayeredWindow对窗体进行布局 方法二: 1.用B ...

  5. Windows下实战Apache+PHP [转]

        一.Apache 1.下载登陆Apache Lougne(http://www.apachelounge.com/download/),找到最新版本的Apache.笔者下载的是带IPv6和Cr ...

  6. Zend Studio安装和使用

    Zend Studio安装和使用 工欲利其事必先利其器 1.ZendStudio 下载 下载地址:http://www.zend.com.安装就和典型的windows软件安装一样.直接next,nex ...

  7. 基于visual Studio2013解决C语言竞赛题之1054抽牌游戏

       题目 解决代码及点评 /************************************************************************/ /* 54 ...

  8. LeetCode77:Combinations

    Given two integers n and k, return all possible combinations of k numbers out of 1 - n. For example, ...

  9. GNOME界面简单使用

    GNOME界面 CentOS下的文件夹打开方式,默认是打开一个文件夹就重新的打开一个窗口,并不是在原有的文件夹中显示要打开文件夹的内容. 怎么修改: 打开任意一个文件夹. Edit --> pr ...

  10. 【慎思堂】之JS牛腩总结

    一 JS基础 1-定义 Javascript是一种脚本语言/描述语言,是一种解释性语言.用于开发交互式web网页,使得网页和用户之间实现了一种实时性的.动态的.交互性的关系,使网页包含更多活跃的元素和 ...