阿里笔试 7-24,第一题提交不通过?
第一题,吃烧饼
N个盘子,每个盘子上有Si个烧饼
每次选择第x个盘子(x的区间:1-N),将1,2, 3,···x盘子里面的都吃一个,如果其中有一个没有烧饼,x不能选择。
问最多能吃多少?
输入:
3
2 1 3
输出:
4
检查了好几遍没啥问题,一直提交不通过,请各位老铁帮我检查~ ,我的代码如下:
import java.util.Scanner; public class Main1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int[] arrs = new int[num]; if (num >= 1 && num <= Math.pow(10,6)){ int res = 0; for (int i = 0; i < num; i++) { arrs[i] = sc.nextInt(); } for (int i = num - 1; i >= 0 ; i--) { if (isExistes(arrs,i)){ res = res + i + 1; jian(arrs,i); } } if (arrs[0] > 0){ res = res + arrs[0]; } System.out.println(res); } } public static boolean isExistes(int[] arrs, int n){ for (int i = 0; i <= n; i++) { if (arrs[i]<=0){ return false; } } return true; } public static void jian(int[] arrs, int n){ for (int i = 0; i <= n; i++) { arrs[i] = arrs[i] - 1; } } }上面思路错了,经过大佬们的指点,利用动态规划的思想,改正代码如下:
import java.util.Scanner; public class Cake { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); long[] arrs = new long[num]; long res = 0; long min = Long.MAX_VALUE; for (int i = 0; i < num; i++) { arrs[i] = sc.nextLong(); min = Math.min(arrs[i],min); res += min; } sc.close(); System.out.println(res); } }