【题目名称】0/1背包
一个旅行者有一个最多能装m公斤物品的背包,现在有n件物品,它们的重量分别是w1,w2,…,wn,它们的价值分别为c1,c2,…,cn。若每一种物品只有一件,求旅行者能获得的最大总价值。
【输入格式】
第一行:两个整数,m(背包容量,m<=200)和n(物品数量,n<=30)。
第二~n+1行:每行两个整数wi,ci,表示每个物品的重量和价值
【输出格式】
一个数据,表示最大总价值
【输入样例#1】
10 4
2 1
3 3
4 5
7 9
【输出样例#1】
12
import java.util.*; public class Main { static int m,n; static int w[]=new int[30]; static int v[]=new int[30]; static int f[][]=new int[30][200]; public static int max(int x,int y){ //求x和y的最大值 if(x>y) return x; else return y; } public static void main(String[] args) { Scanner in=new Scanner(System.in); m=in.nextInt(); n=in.nextInt(); for(int i=1;i<=n;i++) { w[i]=in.nextInt(); v[i]=in.nextInt(); } for(int i=1;i<=n;i++){ //f(i,x)表示前i件物品,总重量不超过x的最优价值 for(int x=1;x<=m;x++){ if(x>=w[i]) f[i][x]=max(f[i-1][x-w[i]]+v[i],f[i-1][x]); else f[i][x]=f[i-1][x]; } } System.out.println(f[n][m]); } }