题目描述
有一个箱子容量为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]); } }