阿里云3.24笔试第三题
自己用的二维dp超内存了,正确应该是贪心
import java.util.*;
public class Aliyun324_3 {
public static void main(String[] args) {
//阿里云3.24笔试 第三题
//n个城市,从1号城市到n号城市,每到达一个城市消耗1单位粮食
//输入n个数,表示每个城市粮食的单价。粮食无上限
//可以携带额外的的粮食,在移动时超过1单位的额外粮食要支付运费,每单位支付1
//求最小的支付金额
//输入示例
//4
//1 3 2 4
//输出:5
//贪心做法: dp[i] = dp[i - 1] + Math.min(i - 1 - j + prices[j]) 对于:1 <= j <= i - 1
//贪心的地方在于对于i处,要选取之前城市中的价格最低的(包含上运费)
//dp[i]表示到达城市i所需要的最小花费
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] prices = new int[n + 1];
int[] dp = new int[n + 1];
for (int i = 1; i <= n; i++) {
prices[i] = in.nextInt();
}
for (int i = 2; i <= n; i++) { //从第二个城市开始
int minVal = Integer.MAX_VALUE;
for (int j = 1; j <= i - 1; j++) { //检索第i个城市之前的最小花费,运费是i-1-j
minVal = Math.min(minVal, i - 1 - j + prices[j]);
}
dp[i] = dp[i - 1] + minVal;
}
System.out.println(dp[n]);
}
}