洛谷-【動態規劃】-P2925 [USACO08DEC]乾草出售Hay For Sale
題意翻譯
題目描述 農民john面臨一個很可怕的事實,因為防範失措他儲存的所有稻草給澳大利亞蟑螂吃光了,他將面臨沒有稻草餵養奶牛的局面。在奶牛斷糧之前,john拉著他的馬車到農民Don的農場中買一些稻草給奶牛過冬。已知john的馬車可以裝的下C(1 <= C <=50,000)立方的稻草。 農民Don有H(1 <= H <= 5,000)捆體積不同的稻草可供購買,每一捆稻草有它自己的體積(1 <= V_i <= C)。面對這些稻草john認真的計算如何充分利用馬車的空間購買儘量多的稻草給他的奶牛過冬。 現在給定馬車的最大容積C和每一捆稻草的體積Vi,john如何在不超過馬車最大容積的情況下買到最大體積的稻草?他不可以把一捆稻草分開來買。 輸入輸出格式 輸入格式: 第一行兩個整數,分別為C和H 第2..H+1行:每一行一個整數代表第i捆稻草的體積Vi 輸出格式: 一個整數,為john能買到的稻草的體積。 輸入輸出樣例 輸入樣例#1: 7 3 2 6 5 輸出樣例#1: 7
翻譯提供者:黑客集團_鬼
題目描述
Farmer John suffered a terrible loss when giant Australian cockroaches ate the entirety of his hay inventory, leaving him with nothing to feed the cows. He hitched up his wagon with capacity C (1 <= C <= 50,000) cubic units and sauntered over to Farmer Don's to get some hay before the cows miss a meal.
Farmer Don had a wide variety of H (1 <= H <= 5,000) hay bales for sale, each with its own volume (1 <= V_i <= C). Bales of hay, you know, are somewhat flexible and can be jammed into the oddest of spaces in a wagon.
FJ carefully evaluates the volumes so that he can figure out the largest amount of hay he can purchase for his cows.
Given the volume constraint and a list of bales to buy, what is the greatest volume of hay FJ can purchase? He can't purchase partial bales, of course. Each input line (after the first) lists a single bale FJ can buy.
約翰遭受了重大的損失:蟑螂吃掉了他所有的乾草,留下一群飢餓的牛.他乘著容量為C(1≤C≤50000)個單位的馬車,去頓因家買一些乾草. 頓因有H(1≤H≤5000)包乾草,每一包都有它的體積Vi(l≤Vi≤C).約翰只能整包購買,
他最多可以運回多少體積的乾草呢?
輸入輸出格式
輸入格式:
* Line 1: Two space-separated integers: C and H
* Lines 2..H+1: Each line describes the volume of a single bale: V_i
輸出格式:
* Line 1: A single integer which is the greatest volume of hay FJ can purchase given the list of bales for sale and constraints.
輸入輸出樣例
輸入樣例#1: 複製
7 3 2 6 5
輸出樣例#1: 複製
7
說明
The wagon holds 7 volumetric units; three bales are offered for sale with volumes of 2, 6, and 5 units, respectively.
Buying the two smaller bales fills the wagon.
題解:01揹包模板題,
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int w=in.nextInt();
int n=in.nextInt();
int[] wgt=new int[n+1];
for(int i=1;i<=n;i++) {
wgt[i]=in.nextInt();
}
int[] dp=new int[w+1];
for(int i=1;i<=n;i++) {
for(int j=w;j>=wgt[i];j--) {
dp[j]=Math.max(dp[j], dp[j-wgt[i]]+wgt[i]);
}
}
System.out.println(dp[w]);
}
}