《全面戰爭戰錘3》惡魔親王傳統守家南下開局教程
阿新 • • 發佈:2022-02-23
題目
貪心+二分
很容易將這道題轉化為求最長遞增子序列。這道題n的範圍比較大,O(n^2)的時間複雜度會超時,所以不能使用dp,而應該用貪心+二分。唯一的難點在於xi等於xj該怎麼辦。
public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int T=scanner.nextInt(); for (int k = 0; k < T; k++) { int n=scanner.nextInt(); int[][] nums=new int[n][2]; for (int j = 0; j < n; j++) { nums[j][0]=scanner.nextInt(); } for (int j = 0; j < n; j++) { nums[j][1]=scanner.nextInt(); } //當xi=xj時,按y值降序排序,這一步是關鍵 //因為這樣保證了num>d[len]時兩個x值必然不相等 Arrays.sort(nums,(a,b)->a[0]==b[0]?b[1]-a[1]:a[0]-b[0]); int[] d=new int[n+1]; int len=1; d[len]=nums[0][1]; for(int i=1;i<n;++i){ int num=nums[i][1]; if(num>d[len]){ d[++len]=num; }else{ int l=0,r=len; while(l<=r){ int mid=(l+r)/2; if(d[mid]<num) l=mid+1; else r=mid-1; } d[r+1]=num; } } System.out.println(len); } } }