2022-01-17

113 阅读1分钟
import java.util.Scanner;
public class Main{
    static int N = 510;
    static int[][] a = new int[N][N];
    static int[][] dp = new int[N][N];
    static int INF  = (int)1e7;
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
         for(int i = 0; i <= n;i++){
            for(int j = 0; j<=i + 1; j++){
                dp[i][j] = -INF;
            }
        }
        for(int i = 1; i <= n; i++){
            for(int j = 1;j <= i;j++){
                a[i][j] = sc.nextInt();
            }
        }
        int maxdp = -INF;
        dp[1][1] = a[1][1];
        for(int i = 2; i <= n; i++){
            for(int j = 1; j <= i; j++){
                dp[i][j] = Math.max(dp[i - 1][j - 1],dp[i - 1][j]) + a[i][j];
            }
        }
        for(int i = 1; i <= n; i++){
            maxdp = Math.max(dp[n][i],maxdp);
        }
        System.out.println(maxdp);
        
    }
}
import java.util.Scanner;
public class Main{
    static int N = 1010;
    static int[] dp = new int[N];
    static int[] a = new int[N];
    public static void main(String[] args){
        Scanner sc =new Scanner(System.in);
        int n = sc.nextInt();
        for(int i = 1; i <= n; i++) {
            a[i] = sc.nextInt();
            dp[i] = 1;
        }
        int ms = 1;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= i ; j++){
                if(a[j] < a[i] ) dp[i] = Math.max(dp[i],dp[j] + 1);
            }
            ms = Math.max(ms,dp[i]);
        }
        System.out.println(ms);
    }
}
import java.util.Scanner;
public class Main{
    static int N = 310;
    static int[] a = new int[N];
    static int[] s = new int[N];
    static int[][] f = new int[N][N];
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for(int i = 1; i <= n; i++){
            a[i] = sc.nextInt();
            s[i] = s[i - 1] + a[i];
        }
        
        for(int len = 2; len <= n; len++){ //枚举长度
            for(int l = 1; l + len - 1 <= n; l++){ //枚举起点
                int r = l + len - 1; //区间终点
                f[l][r] = (int)1e8;
                for(int k = l; k < r; k++){//枚举分割点,构造状态转移方程
                    f[l][r] = Math.min(f[l][r],f[l][k] + f[k+1][r]+s[r] - s[l - 1]);
                }
            }
        }
        System.out.println(f[1][n]);
    }
}