題目描述
有一個箱子容量爲V(正整數,0≤V≤20000),同時有n個物品(0<n≤30,每一個物品有一個體積(正整數)。
要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間爲最小。
輸入格式
1個整數,表示箱子容量
1個整數,表示有n個物品
接下來n行,分別表示這n個物品的各自體積
輸出格式
1個整數,表示箱子剩餘空間。
輸入輸出樣例
輸入
24
6
8
3
12
7
9
7
輸出
0java
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int w = sc.nextInt(); int n = sc.nextInt(); int[] ff = new int[n]; for (int i = 0; i < ff.length; i++) { ff[i] = sc.nextInt(); } int[] t = new int[w + 1]; for (int i = 0; i < n; i++) { for (int j = w; j >= 0; j--) { if (j >= ff[i]) { t[j] = Math.max(t[j], t[j - ff[i]] + ff[i]); } } } System.out.println(w - t[w]); } }
題目描述
辰辰是個天資聰穎的孩子,他的夢想是成爲世界上最偉大的醫師。爲此,他想拜附近最有威望的醫師爲師。醫師爲了判斷他的資質,給他出了一個難題。醫師把他帶到一個處處都是草藥的山洞裏對他說:「孩子,這個山洞裏有一些不一樣的草藥,採每一株都須要一些時間,每一株也有它自身的價值。我會給你一段時間,在這段時間裏,你能夠採到一些草藥。若是你是一個聰明的孩子,你應該能夠讓採到的草藥的總價值最大。」code
若是你是辰辰,你能完成這個任務嗎?class
輸入格式
第一行有 22 個整數 TT(1≤T≤1000)和 MM(1≤M≤100),用一個空格隔開,T 表明總共可以用來採藥的時間,M 表明山洞裏的草藥的數目。
接下來的 M 行每行包括兩個在 1 到 100 之間(包括 1 和 100)的整數,分別表示採摘某株草藥的時間和這株草藥的價值。
輸出格式
輸出在規定的時間內能夠採到的草藥的最大總價值。
輸入輸出樣例
輸入
70 3
71 100
69 1
1 2
輸出
3
說明/提示
對於 30% 的數據,M≤10;
對於所有的數據,M≤100。import
import java.util.Scanner; public class P1048採藥 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner (System.in); int []w=new int[105]; int []val=new int[105]; int []dp=new int[105]; int t=sc.nextInt();int m=sc.nextInt(); for(int i=1;i<=m;i++) { w[i]=sc.nextInt();val[i]=sc.nextInt(); for(int j=t;j>=0;j--) { if(j>=w[i]) { dp[j]=Math.max(dp[j-w[i]]+val[i], dp[j]); } } } System.out.println(dp[t]); } }