ZOJ2972-Hurdles of 110m

来源:互联网 发布:js中怎么给input赋值 编辑:程序博客网 时间:2024/05/16 17:42

dp[i][j],跨过i个栏,用了j点体力时的最小时间

dp[0][j]=0

#include<cstdio>#include<cstring>#include<cmath>#include<iostream>using namespace std;#define INF 0x3f3f3f3fint main(){#ifdef TESTfreopen("in.in","r",stdin);#endifint t,n,m;int t1[200],t2[200],t3[200],f1[200],f2[200];int dp[200][200];scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d%d%d%d%d",t1+i,t2+i,t3+i,f1+i,f2+i);}memset(dp,INF,sizeof(dp));/*dp[0][m]=0;dp[1][m]=t2[1];dp[1][m-f1[1]]=t1[1];*/memset(dp[0],0,sizeof(dp[0]));for(int i=1;i<=n;i++){for(int j=0;j<=m;j++){if(j>=f1[i])dp[i][j-f1[i]]=min(dp[i][j-f1[i]],dp[i-1][j]+t1[i]);dp[i][j]=min(dp[i-1][j]+t2[i],dp[i][j]);int f=(j+f2[i])>=m?m:j+f2[i];dp[i][f]=min(dp[i-1][j]+t3[i],dp[i][f]);}}int ans=INF;for(int i=0;i<=m;i++){/*printf("%d\n",dp[n][i]);*/ans=ans>dp[n][i]?dp[n][i]:ans;}printf("%d\n",ans);}}


0 0
原创粉丝点击