题解 | 购物单

购物单

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

import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int totalMoney = sc.nextInt()/10;
		int n = sc.nextInt();	
		int[][] prices = new int[n+1][3];
		int[][] values = new int[n+1][3];
		for (int i = 1; i <= n; i++) {
			int a = sc.nextInt()/10;
			int b = sc.nextInt();
			int c = sc.nextInt();
			if (c == 0) {
				prices[i][0] = a;
				values[i][0] = b;
			} else if (prices[c][1] == 0) {
				prices[c][1] = a;
				values[c][1] = b;
			} else {
				prices[c][2] = a;
				values[c][2] = b;
			}
		}

		int[][] dp = new int[n+1][totalMoney+1];
		for (int i = 1; i <= n; i++ ) {
			for (int j = 1; j <= totalMoney; j++) {
				int a = prices[i][0], b = values[i][0];
				int c = prices[i][1], d = values[i][1];
				int e = prices[i][2], f = values[i][2];
				dp[i][j] = j >= a ? Math.max(dp[i-1][j], dp[i-1][j-a] + a*b) : dp[i-1][j];
				dp[i][j] = j >= a + c ? Math.max(dp[i][j], dp[i-1][j-a-c] + a*b + c*d) : dp[i][j];
				dp[i][j] = j >= a + e ? Math.max(dp[i][j], dp[i-1][j-a-e] + a*b + e*f) : dp[i][j];
				dp[i][j] = j >= a + c + e ? Math.max(dp[i][j], dp[i-1][j-a-c-e] + a*b + c*d + e*f) : dp[i][j];
			}
		}
		System.out.println(dp[n][totalMoney]*10);
	}

}

一直没人发,我发一个吧,就是按照大佬们的思路java写了一遍

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务