简单错误记录_马戏团_合唱团
简单错误记录
马戏团
import java.util.*; class Node implements Comparable<Node>{ public int w; public int h; public Node(int w,int h){ this.w = w; this.h = h; } public int compareTo(Node obj){ int ret = this.w - obj.w; if(ret==0){//体重相同,身高降序! return obj.h - this.h; } //按照身高升序排序! return ret; } } public class Main{ public static int getMathLen(Node[] nodes,int n){ //按体重排升序,体重相同,身高降序! Arrays.sort(nodes); //动归求最长递增子序列! //f(i):以i结尾的最长递增子序列! // f(i) = math(f(j)+1,f(i)) (j<i)&& nodes[j].h<=nodes.h; //初始化 f(i) = 1;//以i结尾的子序列至少长度为1 //返回结果 Math(f(i)) int result = 0; int[] dp = new int[n]; for(int i = 0;i<n;i++){ dp[i] = 1; } for(int i = 1;i<n;i++){ for(int j = 0;j<i;j++){ if(nodes[j].h <= nodes[i].h){ dp[i] = Math.max(dp[j]+1,dp[i]); } } result = Math.max(dp[i],result); } return result; } public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ int n = sc.nextInt(); Node[] nodes = new Node[n]; for(int i = 0;i< n;i++){ sc.nextInt(); nodes[i] = new Node(sc.nextInt(),sc.nextInt()); } System.out.println(getMathLen(nodes,n)); } } }
合唱团
import java.util.*; public class Main{ public static long getMaxVal(long[] arr,int n,int k,int d){ long[][] MaxVal = new long[n+1][k+1]; long[][] MinVal = new long[n+1][k+1]; //初始化: for(int i = 1;i<=n;i++){ MaxVal[i][1] = MinVal[i][1] = arr[i]; } long result = MaxVal[1][1]; //状态转移: for(int i = 2;i<=n;i++){ for(int j = 2;j<= k;j++){ //i-d <= m <= i-1; for(int m = Math.max(1,i-d);m<=i-1;m++){ MaxVal[i][j] = Math.max(MaxVal[i][j], Math.max(MaxVal[m][j-1]*arr[i],MinVal[m][j-1]*arr[i])); MinVal[i][j] = Math.min(MinVal[i][j], Math.min(MaxVal[m][j-1]*arr[i],MinVal[m][j-1]*arr[i])); } } result = Math.max(MaxVal[i][k],result); } return result; } public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNextInt()){ int n = sc.nextInt(); long[] arr = new long[n+1]; for(int i = 1;i<=n;i++){ arr[i] = sc.nextInt(); } int k = sc.nextInt(); int d = sc.nextInt(); System.out.println(getMaxVal(arr,n,k,d)); } } }