AcWing算法提高
AARM
这个作者很懒,什么都没留下…
展开
-
AcWing 1010. 拦截导弹(dp与贪心)
dp与贪心解LIS问题1、dp + dpO(n^2)第一问显然每套导弹拦截系统拦截导弹高度为不升子序列,求最长的就好了第二问求导弹拦截系统的个数可以转化为求最长上升子序列长度证明见: Tian-Xing’s blog orz orz1、首先我们把这些导弹分为s组(s即为所求答案)可以看出每一组都是一个不升子序列2、划分完后我们在组一里找一个原序列里以组一的开头点连续的不升子串的最后一个元素,可以知道在组2中一定有一个大与它的点(如果组二中没有的话,那么组二中最高的导弹高度必然小于这..原创 2020-09-02 13:53:19 · 240 阅读 · 0 评论 -
AcWing 1016. 最大上升子序列和(动态规划线性dp)
算法思想:朴素的做法(n^2)类似于合唱队形的朴素做法可以先预处理从左到右的最大子序列的和f[i]然后遍历f找到最大值。朴素做法可以解决最长与最大的上升子序列的问题,但是贪心加二分只能解决最长上升子序列的问题。import java.util.*;class Main{ static int n = 0, N = 1010, last = 0; static int[] nums = new int[N], f = new int[N]; ..原创 2020-09-02 12:31:27 · 204 阅读 · 0 评论 -
AcWing 1012. 友好城市(最长上升子序列)
时间复杂度:O(n^2);换成单调栈O(nlogn)算法思想:对一边排序,另一边求最长上升子序列//一岸从小到大排序,另一岸求最长上升子序列import java.util.*;class Main{ static int n = 0, N = 5010; static int[][] nums = new int[N][2]; static int[] max = new int[N]; public static void main(..原创 2020-08-29 21:28:07 · 201 阅读 · 0 评论 -
AcWing 482. 合唱队形(最长上升子序列 单调栈)
算法思想用登山代码过时间复杂度:O(nlogn)import java.util.*;class Main{ static int n = 0, N = 110; static int[] nums = new int[N]; static int[] left = new int[N], right = new int[N]; static int bs(int[] max, int len, int num){//找到从左到右第一个大于nu...原创 2020-08-29 19:23:32 · 211 阅读 · 0 评论 -
AcWing 1014. 登山JAVA(最长单调子序列 单调栈)
时间复杂度:O(nlogn)//单调栈问题//分别计算从左向右和从右向左的最长上升子序列,分别存储到两个数组中import java.util.*; class Main{ static int n = 0, N = 1010; static int[] nums = new int[N]; static int[] left = new int[N], right = new int[N]; static int bs(int[] max, int l..原创 2020-08-29 19:05:56 · 246 阅读 · 0 评论 -
AcWing 1017. 怪盗基德的滑翔翼(最长上升子序列,单调栈)
算法思想单调队列问题分别计算从左向右和从右向左的最长上升子序列,取最大值即可//单调队列问题//分别计算从左向右和从右向左的最长上升子序列,取最大值即可import java.io.*;import java.util.*;class Main{ static int n = 0, N = 110; static int[] nums = new int[N]; static int bs(int[] max, int len, int num...原创 2020-08-29 17:46:35 · 254 阅读 · 0 评论 -
AcWing 275. 传纸条(数字三角形线性DP)
证明可以使用方格取数的代码:证明首先, 从右下角回传可以等价为从左上角同时传两次。要想两个路径除了起点和终点之外没有交点,那么肯定有一条路径完全位于另一条的上方。现在考虑路径有交点的情况:这种情况其实转换起来很简单,只要把位于红色线段上方的蓝色线段交换颜色就可以了,也就是说当红色处于蓝色的下方的时候,将红色的路径换成从蓝色的那段走是等效的(因为两条路径加起来经过的节点完全没有变)。就可以得到:但是这个时候虽然满足了红色路径完全在蓝色的上方,但是却有交点。但是因为所有节点的...原创 2020-08-29 14:39:36 · 211 阅读 · 0 评论 -
AcWing 1027. 方格取数(数字三角形线性DP)
算法思想:四维未优化版import java.util.*;class Main{ static int n = 0, N = 15; static int[][] nums = new int[N][N]; static int[][][] max = new int[N + N][N][N]; public static void main(String[] args)throws Exception{ Scanner sc ...原创 2020-08-29 13:14:02 · 214 阅读 · 0 评论 -
AcWing 1018. 最低通行费(数字三角形线性DP)
样例中,最小值为109=1+2+5+7+9+12+19+21+33。import java.lang.*;import java.util.*;class Main{ static int n = 0, N = 110; static int[][] nums = new int[N][N]; static int[][] min = new int[N][N]; static int getMin(){ for(int i = 1; i &l..原创 2020-08-28 10:18:18 · 220 阅读 · 0 评论 -
AcWing 1015. 摘花生JAVA(数字三角形模型DP)
类似:leetcode62. 不同路径;63. 不同路径 IIimport java.io.*;import java.lang.*;class Main{ static int n = 0, R = 0, C = 0, N = 110; static int[][] nums = new int[N][N]; static int[][] max = new int[N][N]; static int getMax(){原创 2020-08-28 09:31:56 · 251 阅读 · 0 评论