您的位置:首页 > 大数据 > 人工智能

递推DP URAL 1031 Railway Tickets

2015-05-13 18:39 387 查看
题目传送门

 /*
简单递推DP:读题烦!在区间内的都更新一遍,dp[]初始化INF
注意:s1与s2大小不一定,坑!
详细解释:http://blog.csdn.net/kk303/article/details/6847948
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
using namespace std;

const int MAXN = 1e4 + 10;
const int INF = 0x3f3f3f3f;
int C[4], L[4];
int dp[MAXN], a[MAXN];

int main(void)        //URAL 1031 Railway Tickets
{
//freopen ("Y.in", "r", stdin);

while (scanf ("%d%d%d%d%d%d", &L[1], &L[2], &L[3], &C[1], &C[2], &C[3]) == 6)
{
int n;    scanf ("%d", &n);
int s1, s2;
scanf ("%d%d", &s1, &s2);
if (s1 > s2)    swap (s1, s2);
a[1] = 0;
for (int i=2; i<=n; ++i)
{
scanf ("%d", &a[i]);    dp[i] = INF;
}

dp[s1] = 0;
for (int i=s1+1; i<=s2; ++i)
{
for (int j=1; j<=3; ++j)
{
int k = i - 1;
while (k >= s1)
{
if (a[i] - a[k] > L[j])    break;
if (dp[i] > dp[k] + C[j])    dp[i] = dp[k] + C[j];
k--;
}
}
}

printf ("%d\n", dp[s2]);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: