您的位置:首页 > 其它

九度 oj 题目1086:最小花费

2017-01-14 20:54 260 查看
http://ac.jobdu.com/problem.php?pid=1086

#include <stdio.h>
#include <cstdlib>
#include <algorithm>

int main(){
//freopen("in/1086.in","r",stdin);
long long l1,l2,l3,c1,c2,c3;
int A,B;
int n=0;
int* a;
long long *dp;
while(scanf("%lld %lld %lld %lld %lld %lld",&l1,&l2,&l3,&c1,&c2,&c3)!=EOF ){
scanf("%d %d",&A,&B);
scanf("%d",&n);
a = (int*) malloc((unsigned) (n+1)*sizeof(int));
dp = (long long *) malloc((unsigned) (n+1) *sizeof(long long));
for (int i = 2; i <= n; ++i) {
scanf("%d",&a[i]);
}
a[1] = 0;

for (int i = A; i <=B ; ++i) dp[i] = 99999999999;

dp[A] = 0;

for (int i = A+1; i <=B; ++i) {
int j;
// l1
for (j = i-1; j >=A && a[i] - a[j] <=l1; j--) {
dp[i] = std::min(dp[i], dp[j]+c1);
}

//l2
for (;j>=A && a[i]-a[j] <=l2 ; j--){
dp[i] = std::min(dp[i],dp[j] + c2);
}

//l3
for (;j>=A && a[i]-a[j]<=l3; j--) {
dp[i] = std::min(dp[i],dp[j]+c3);
}

}

printf("%lld\n",dp[B]);
}

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