餐馆(动态规划) 灰太狼 2022-07-18 05:52 94阅读 0赞 某餐馆有n张桌子,每张桌子有一个参数:a可容纳的最大人数;有m批客人,每批客人有两个参数:b为人数,c预计消费金额。在不允许拼桌的情况下,请实现算法选择其中一部分客人,使得总预计消费金额最大。 输入包括m+2行。 第一行两个整数n(1<=n<=50000),m(1<=m<=50000) 第二行为n个参数a,即每个桌子可容纳的最大人数,以空格分隔,范围均在32位int范围内。 接下来m行,每行两个参数b,c。分别表示第i批客人的人数和预计消费金额,以空格分隔,范围均在32位的范围内。 输出一个整数,表示最大的总预计消费金额 输入例子: 3 5 2 4 2 1 3 3 5 3 7 5 1 10 输入: 20 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextInt()) { int m = sc.nextInt(); int n = sc.nextInt(); int[] c = new int[m]; int[] w = new int[n]; for (int i = 0; i < m; i++) { c[i] = sc.nextInt(); } int[] v = new int[n]; for (int i = 0; i < n; i++) { w[i] = sc.nextInt(); v[i] = sc.nextInt(); } int[][] b = new int[n][m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (w[i] < c[j]) { b[i][j] = v[i]; } else { b[i][j] = 0; } } } /* * int[][] b = { {3,3,3}, {0,5,0}, {0,7,0}, {0,0,0}, {10,10,10}}; */ int row = b.length; int column = b[0].length; int[][] result = new int[row][column]; Set<Integer> set = new HashSet<Integer>(); ArrayList<HashSet<Integer>> list = new ArrayList<HashSet<Integer>>(); for (int i = 0; i < row; i++) { list.add(new HashSet<Integer>()); } int[][] flag = new int[row][column]; for (int i = 0; i < row; i++) { result[i][0] = b[i][0]; list.get(i).add(i); flag[i][0] = i; } for (int t = 1; t < column; t++) { for (int j = 0; j < row; j++) { int max = 0; int maxflag = 0; for (int i = 0; i < row; i++) { if (result[j][t - 1] + b[i][t] >= max && !list.get(j).contains(i)) { max = result[j][t - 1] + b[i][t]; maxflag = i; } } flag[j][t] = maxflag; result[j][t] = max; list.get(j).add(maxflag); } } int rs = 0; int k = 0; for (int i = 0; i < row; i++) { if (result[i][column - 1] > rs) { rs = result[i][column - 1]; k = i; } } System.out.println(rs); for (int i = 0; i < column; i++) { System.out.print(flag[k][i] + "-->"); } } }
相关 动态规划 一:概念: 和分冶法相似,不同之处在于前者是把问题划分为互不相交的子问题,而动态规划会出现子问题重叠的情况。通常用来求解最优化问题。。 基本步骤: ①:刻画一个最优 我就是我/ 2022年12月01日 11:51/ 0 赞/ 24 阅读
相关 动态规划 -------------------- 动态规划的设计思想 动态规划(DP)\[1\]通过分解成子问题解决了给定复杂的问题,并存储子问题的结果,以避免再次计算相同的结 柔情只为你懂/ 2022年09月25日 11:15/ 0 赞/ 254 阅读
相关 动态规划 作者:Hawstein 出处: [http://hawstein.com/posts/dp-novice-to-advanced.html][http_hawstein.c 淡淡的烟草味﹌/ 2022年09月24日 12:17/ 0 赞/ 202 阅读
相关 动态规划 1. 首先,动态规划不是一个特定的算法,它代表的是一种思想,一种手段 2. 动态规划方法往往用于求解“最优化问题”,能用动态规划求解的问题的前提是问题具有“最优子结构性质” 刺骨的言语ヽ痛彻心扉/ 2022年07月29日 11:46/ 0 赞/ 92 阅读
相关 餐馆(动态规划) 某餐馆有n张桌子,每张桌子有一个参数:a可容纳的最大人数;有m批客人,每批客人有两个参数:b为人数,c预计消费金额。在不允许拼桌的情况下,请实现算法选择其中一部分客人,使 灰太狼/ 2022年07月18日 05:52/ 0 赞/ 95 阅读
相关 动态规划 首先是概念:动态规划就是将原问题划分为简单的几个小问题(有点类似与分治法?但是分治法中的各个小问题是相互独立的,彼此之间不会产生影响,但是动态规划中所得的值和前面相关,当前的解 青旅半醒/ 2022年07月12日 05:01/ 0 赞/ 316 阅读
相关 动态规划 基本思想: 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 区别: 与 ゞ 浴缸里的玫瑰/ 2022年05月25日 09:44/ 0 赞/ 445 阅读
相关 动态规划 等我有时间了,一定要把《算法导论》啃完,这本书的印刷质量实在太好了,就是烧脑子,滑稽。 适合应用动态规划求解的最优化问题应该具备两个要素: 最优子结构:一个问题的最优解包含 短命女/ 2022年05月17日 09:45/ 0 赞/ 324 阅读
相关 动态规划 1.题目:最长递增子序列(Longest Increasing Subsequence) 问题描述: > 给定长度为N的数组A,计算A的最长单调递增的子序列(不一定连续) 妖狐艹你老母/ 2022年05月11日 04:56/ 0 赞/ 280 阅读
相关 动态规划 算法题中动态规划是真的难,写一篇总结,彻底解决动态规划。参考:[https://blog.csdn.net/u013309870/article/details/7519359 左手的ㄟ右手/ 2021年11月19日 14:14/ 0 赞/ 493 阅读
还没有评论,来说两句吧...