本题是典型的二维 0/1 背包问题。
每个任务只能选择一次,同时受到内存和算力两个资源的限制。
定义:
dp[j][k] 表示恰好使用 j 单位内存、k 单位算力时,能够获得的最大收益。
运维团队在批量处理服务器运维任务时,需要合理分配有限的内存资源和算力资源。每个任务执行后会占用一定量的资源,同时能够带来对应的运维收益,例如增强系统稳定性、降低变更风险等。
现有n个待执行任务,系统最多可以提供A单位内存和B单位算力。对于第i个任务,执行它需要消耗xi单位内存、yi单位算力,并可以获得收益wi。
请从所有任务中选择若干个执行,使所选任务的内存消耗总量不超过A,算力消耗总量不超过B,并使获得的总运维收益最大。
在得到最大收益的情况下,还需要确定对应方案的内存总消耗和算力总消耗。若存在多个方案获得的收益相同,则优先选择内存消耗更小的方案;若内存消耗也相同,则选择算力消耗更小的方案。
第一行输入三个整数n、A、B(1≤n≤100,1≤A≤500,1≤B≤500),分别表示任务数量、可使用的最大内存和可使用的最大算力。
第二行到(n+1)行,每行输入三个正整数xi、yi、wi(1≤xi≤100,1≤yi≤100,1≤wi≤100),分别表示第i个任务的内存消耗、算力消耗和运维收益。
输出三个整数,用空格分隔:
若有多组方案都能达到最大收益,输出内存消耗最小的方案;若内存消耗也相同,则输出算力消耗最小的方案。
输入
4 12 10
5 4 8
6 3 10
4 6 9
3 2 5
输出
19 10 9
输入
3 9 8
4 3 7
5 4 9
3 4 6
输出
16 9 7
说明
选择第1、2个任务,总内存(4+5=9),总算力(3+4=7),总收益(7+9=16)
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.