hdu1087简单动态规划

求最长子序列的和。

dp[i] = max(dp[i] , dp[j] + xx[i])。

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            if (n==0) {
                break;
            }
            int[] xx = new int[n];
            for (int i = 0; i < xx.length; i++) {
                int sr = sc.nextInt();
                if (sr<0) {
                    xx[i] = 0;
                }else {
                    xx[i] = sr;
                }
                 
            }
            int[] dp = new int[n];
            for (int i = 0; i < dp.length; i++) {
                dp[i] = xx[i];
                
            }
            for (int i = 0; i < dp.length; i++) {
                for (int j = 0; j < i; j++) {
                    if (xx[i] > xx[j]) {
                        if (dp[i] < dp[j]+xx[i]) {
                            dp[i] = dp[j]+xx[i];
                        }
                    }
                }                
            }
            /*
            for (int i = 0; i < dp.length; i++) {
                System.out.print(dp[i]);
                System.out.print(" ");
            }*/
            Arrays.sort(dp);
            System.out.println(dp[n-1]);
        }
        sc.close();
    }

}

 

posted @ 2024-06-08 17:15  XiaohuangTX  阅读(3)  评论(0编辑  收藏  举报