题解 | #购物单#

购物单

https://www.nowcoder.com/practice/f9c6f980eeec43ef85be20755ddbeaf4

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String str = in.nextLine();
            String[] strings = str.split(" ");
            int Max_money = Integer.parseInt(strings[0]);
            int Max_count = Integer.parseInt(strings[1]);
            int[][] ss = new int[Max_count+1][5];
            for (int i = 1; i <= Max_count; i++) {
                String shop = in.nextLine();
                String[] shop1 = shop.split(" ");
                ss[i][0] = Integer.parseInt(shop1[0]);
                ss[i][1] = Integer.parseInt(shop1[1]) * Integer.parseInt(shop1[0]);
                ss[i][2] = Integer.parseInt(shop1[2]);
                int pan = ss[i][2];
                if (pan != 0) {
                    if (ss[pan][3] == 0) ss[pan][3] = i;
                    else ss[pan][4] = i;
                }
            }
            int[][] dp = new int[Max_count + 1][Max_money + 1];
            for (int i = 1; i <= Max_count; i++) {
                int v = ss[i][0];
                int p = ss[i][1];
                int q = ss[i][2];
                int f1 = ss[i][3];
                int f2 = ss[i][4];

                for (int j = 1; j <= Max_money; j++) {
                        dp[i][j] = dp[i - 1][j]; 
                        if (q != 0) continue;    
                        if (j >= v) {     
                            dp[i][j] = Math.max(dp[i][j],
                                                p + dp[i - 1][j - v]); 
                            if (f1 != 0 && j>=v+ss[f1][0]) dp[i][j] = Math.max(dp[i][j],
                                                                 p + ss[f1][1] + dp[i - 1][j - v - ss[f1][0]]);
                            if (f2 != 0 && j>=v+ss[f2][0]) dp[i][j] = Math.max(dp[i][j], p + ss[f2][1] + dp[i - 1][j - v - ss[f2][0]]);
                            if(f2 != 0 && j>=v+ss[f1][0]+ss[f2][0]) dp[i][j] = Math.max(dp[i][j],
                                                    p + ss[f1][1] + ss[f2][1] + dp[i - 1][j - v - ss[f1][0] - ss[f2][0]]);
                            
                        }
                    
                }
            }
            System.out.println(dp[Max_count][Max_money]);
        }
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务