沧海的孤塔

编程入门 行业动态 更新时间:2024-10-22 18:41:15

<a href=https://www.elefans.com/category/jswz/34/1702110.html style=沧海的孤塔"/>

沧海的孤塔

沧海的孤塔-chimera --答案

时间复杂度为O(mn)

public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int k = scanner.nextInt();long[] a = new long[n+1];for (int i = 1; i <= n; i++) {a[i] = scanner.nextInt();}//dptable[i][j]代表第i时刻发起j次攻击的话最大的总伤害值long[][] dptable = new long[n+1][m+1];LinkedList<Integer> q = new LinkedList<>();for (int i = 1; i <= n; i++) {dptable[i][0] = Long.MIN_VALUE;}dptable[0][0] = 0;for (int i = 1; i <= m; i++) {q.add(0);for (int j = 1; j <= n; j++) {while(!q.isEmpty()&&q.getFirst() < j - k) q.removeFirst();dptable[j][i] = dptable[q.getFirst()][i-1] + a[j];while(!q.isEmpty()&&dptable[q.getLast()][i-1] <= dptable[j][i-1]) q.removeLast();q.addLast(j);}q.clear();}long res = 0;for (int i = n; i > n - k; i--) {res = Math.max(res,dptable[i][m]);}System.out.println(res);}
}

时间复杂度为O(mnk)

public class Main{public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int k = scanner.nextInt();int[] array = new int[n+1];//dpatble[i][1][j]代表 第i时刻发起攻击且已经发起了j攻击的最大总伤害值//dpatble[i][0][j]代表 第i时刻不发起攻击且已经发起了j攻击的最大总伤害值long[][][] dptable = new long[n+1][2][m+1];for (int i = 1; i <= n; i++) {array[i] = scanner.nextInt();for (int j = 1; j <= i&&j<=m; j++) {long max = 0L;for(int ab= i-1;ab>=1&&ab>=i-k+1;ab--){max = Math.max(dptable[ab][1][j],max);}dptable[i][0][j] = max;if(i-k>=1){max = Math.max(max,dptable[i-k][1][j-1]);}if(i>k&&max==0) dptable[i][1][j] = 0;else dptable[i][1][j] =  max+array[i];}}System.out.println( Math.max(dptable[n][0][m],dptable[n][1][m]));}
}

更多推荐

沧海的孤塔

本文发布于:2024-02-10 19:02:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1676824.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:沧海

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!