您的位置:首页 > 其它

题目1086:最小花费

2014-01-05 22:40 211 查看
import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;
import java.util.Scanner;
import java.lang.Math;

class Main
{
public static final boolean DEBUG = false;

public static void main(String[] args) throws IOException
{
Scanner cin;
int l1, l2, l3, c1, c2, c3;
int a, b;
int n;
long[] dis;
long[] f;

if (DEBUG) {
cin = new Scanner(new BufferedReader(new FileReader("d:\\OJ\\uva_in.txt")));
} else {
cin = new Scanner(System.in);
}

while (cin.hasNext()) {
l1 = cin.nextInt();
l2 = cin.nextInt();
l3 = cin.nextInt();
c1 = cin.nextInt();
c2 = cin.nextInt();
c3 = cin.nextInt();
a = cin.nextInt();
b = cin.nextInt();

if (a > b) {
int tmp;
tmp = a;
a = b;
b = tmp;
}

n = cin.nextInt();

dis = new long[n + 1];
f = new long[n + 1];

for (int i = 2; i <= n; i++) {
dis[i] = cin.nextLong();
}

for (int i = b; i > a; i--) {
dis[i] -= dis[i - 1];
}
//System.out.println(Long.MAX_VALUE);
for (int i = a; i <= b; i++) f[i] = Long.MAX_VALUE / 2;
f[a] = 0;

for (int i = a + 1; i <= b; i++) {
long len = 0;
for (int j = i - 1; j >= a; j--) {
len += dis[j + 1];
if (len <= l1) {
f[i] = Math.min(f[i], f[j] + c1);
} else if (len <= l2) {
f[i] = Math.min(f[i], f[j] + c2);
} else if (len <= l3) {
f[i] = Math.min(f[i], f[j] + c3);
} else break;
}
}

System.out.println(f[b]);
}

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