zoj 2972 Hurdles of 110m(dp,背包)

原创 2012年03月29日 20:10:16

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2972

题目是给出t1(最快需要的时间),t2(normal),t3(slowest),以及t1所需要的能量,t3所赢得的能量,、t2不消耗也不赢得。

求最小消耗时间。

int dp[x][y];//跨越x个栏剩余y体力的需要的最小时间。

 

#include<stdio.h>//zoj 2972 dp zisu123
#include<string.h>
#include<stdlib.h>
#define INF 1<<25
typedef struct lx{
	int t1,t2,t3;
	int f1,f2;
}lx;
lx liu[120];
inline int min(int x,int y)
{
	return x<y?x:y;
}
int main()
{
	int T,N,M;
	int dp[120][120];//跨越x个栏剩余y体力的需要的最小时间。
	int i,j;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&N,&M);
		for(i=0;i<=N;i++)
			for(j=0;j<=M;j++)
				dp[i][j]=INF;
		dp[0][M]=0;
		for(i=0;i<N;i++)
			scanf("%d%d%d%d%d",&liu[i].t1,&liu[i].t2,&liu[i].t3,&liu[i].f1,&liu[i].f2);
		for(i=0;i<N;i++)
			for(j=0;j<=M;j++)
			{
				if(j>=liu[i].f1)// fastest
				{
					dp[i+1][j-liu[i].f1]=min(dp[i+1][j-liu[i].f1],dp[i][j]+liu[i].t1);
				}
				if(j+liu[i].f2>M)//slowest
				{
					dp[i+1][M]=min(dp[i+1][M],dp[i][j]+liu[i].t3);
				}
				else
				{
					dp[i+1][j+liu[i].f2]=min(dp[i+1][j+liu[i].f2],dp[i][j]+liu[i].t3);
				}
				dp[i+1][j]=min(dp[i+1][j],dp[i][j]+liu[i].t2);//normal
			}
		int minTime=INF;
		for(i=0;i<=M;i++)
		{
			if(minTime>dp[N][i])
				minTime=dp[N][i];
		}
		printf("%d\n",minTime);

	}
//	system("pause");
	return 0;
}

ZOJ 2972 Hurdles of 110m(DP)

题意:刘翔跨栏问题,初始有M能量,有N块区域需要跑,在第i可以使用3种模式: 1.Fast模式 通过第i个区域需要用T1[i]的时间,需要消耗F1[i]能量. 2.Normal模式 通过第i个区域需要...
  • zxjcarrot
  • zxjcarrot
  • 2014年04月06日 16:46
  • 540

ZOJ 2972 Hurdles of 110m(DP)

题目链接:重点内容http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2972跨栏跑分为几段,每段有三种跑步方式,不同方式通过每段...
  • pootree
  • pootree
  • 2016年02月19日 17:39
  • 252

ZOJ - 2972 Hurdles of 110m

 背包问题的变形~~想法很直观,但是我WA了很多次。但是一改状态表示就立马A了。其实不是状态表示的问题,而是在递推的时候出现了问题。由此我得出状态表示的选择也是有学问的。所以就写了那篇 《动态规划思考...
  • zdsfwy
  • zdsfwy
  • 2011年04月09日 18:54
  • 886

ZOJ 2972 Hurdles of 110m

In the year 2008, the 29th Olympic Games will be held in Beijing. This will signify the prosperity o...
  • jtjy568805874
  • jtjy568805874
  • 2017年02月17日 21:30
  • 95

ZOJ - 2972 Hurdles of 110m

一共有三种dp方程。注意好初始化 #include #include #include #include #include using namespace std; const int...
  • kalameet
  • kalameet
  • 2015年12月03日 20:24
  • 55

zoj 2972 Hurdles of 110m

体力值最高为m,刚开始没看到,一直wa。 dp[i][j]:跑完前i个区域还剩j点体力值。 所以有四种情况: 用a[i][5]数组储存每一行输入的五个数。 - if(j+a[i][3]=...
  • qq_31457873
  • qq_31457873
  • 2015年11月11日 13:48
  • 174

ZOJ 2972 Hurdles of 110m

题目链接:https://www.nitacm.com/problem_show.php?pid=17880题解:题目大意: 给你n段的跑步,你的能量最多为m(同时也代表初始的能量),然后给你n行,...
  • silver_bone
  • silver_bone
  • 2017年04月02日 10:57
  • 318

zoj 2972 - Hurdles of 110m

题目:110米栏,运动员可以用三种状态跑,1状态耗体力且跑得快,2状态不消耗体力,3状态恢复体力且跑得慢。            体力上限是M,且初始满体力,现在想知到最小的时间跑完全程。 分析:dp...
  • mobius_strip
  • mobius_strip
  • 2014年09月18日 20:36
  • 737

[动态规划]ZOJ 2972 Hurdles of 110m

对于动归,总是有点抓不住重点的感觉。这题是看懂了各位大神的代码之后,才写出来的。。。 #include #include #include #include #define INF 0x3f3...
  • u013163567
  • u013163567
  • 2014年02月24日 19:58
  • 355

ZOJ 2972 Hurdles of 110m 解题报告

AccecptTime:  2009-02-01 16:21:30Language: C++Memory:  184KTime:  0MSErrors:  3 waAlgorithm: DP    #...
  • suikay
  • suikay
  • 2009年02月01日 16:22
  • 1001
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:zoj 2972 Hurdles of 110m(dp,背包)
举报原因:
原因补充:

(最多只允许输入30个字)