您的位置:首页 > 其它

ZOJ - 2972 Hurdles of 110m

2015-12-03 20:24 423 查看
一共有三种dp方程。注意好初始化

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN = 0x3f3f3f3f;
struct s
{
int t1,t2,t3,f1,f2;
};
s str[280];
int dp[280][280];
int main()
{
#ifdef LOCAL
freopen("dd.txt", "r", stdin);
#endif
int t, m, n;
while(~scanf("%d",&t))
{
while(t--)
{
memset(dp, 0x3f, sizeof(dp));
memset(dp[0], 0, sizeof(dp[0]));
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
{
scanf("%d%d%d%d%d", &str[i].t1, &str[i].t2, &str[i].t3, &str[i].f1, &str[i].f2);
}
for(int i = 1; i <= n; i++)
{
//fast
for(int j = 0; j <= m; j++)
{
if(j >= str[i].f1)
{
dp[i][j - str[i].f1] = min(dp[i][j - str[i].f1],dp[i-1][j]+str[i].t1);
}

//normal

dp[i][j] = min(dp[i][j],dp[i-1][j] + str[i].t2);

//slow

dp[i][min(j+str[i].f2, m)] = min(dp[i][min(j+str[i].f2, m)],dp[i - 1][j] + str[i].t3);
}
}
int minin = MAXN;
for(int i = 0; i <= m; i++)
{
minin =min(minin, dp[n][i]);
}
printf("%d\n", minin);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: