小艺每天都在吃和睡中浑浑噩噩的度过。
然而肚子是有容量上限V的。
假设,小艺有n种零食,每种零食的甜蜜值为b,占据小肚子空间ai.
小艺想知道在自己肚子空间上限允许范围内能获得的最大甜蜜值是多少。
输入描述:
第一行输入整数v和n,分别代表肚子容量上限,和零食种类数(1<=v,n<=1000)
以下n行每行包含两个整数,代表每种零食占据肚子空间a和甜蜜值b.(1<=a,b<=1000)
输出描述:
最大甜蜜值
例
70 3
71 100
69 1
1 2
输出:140
代码:
1 import java.util.Scanner; 2 3 public class Wanmeishijie01 { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 // 小艺每天都在吃和睡中浑浑噩噩的度过。 8 // 9 // 然而肚子是有容量上限V的。 10 // 11 // 假设,小艺有n种零食,每种零食的甜蜜值为b,占据小肚子空间ai. 12 // 13 // 小艺想知道在自己肚子空间上限允许范围内能获得的最大甜蜜值是多少。 14 // 15 // 输入描述: 16 // 17 // 第一行输入整数v和n,分别代表肚子容量上限,和零食种类数(1<=v,n<=1000) 18 // 以下n行每行包含两个整数,代表每种零食占据肚子空间a和甜蜜值b.(1<=a,b<=1000) 19 // 20 // 输出描述: 21 // 22 // 最大甜蜜值 23 // 70 3 24 // 71 100 25 // 69 1 26 // 1 2 27 28 Scanner sc = new Scanner(System.in); 29 String line0 = sc.nextLine(); 30 String[] sline = line0.split(" "); 31 // for(String k:sline) 32 int v = Integer.parseInt(sline[0]); 33 int n = Integer.parseInt(sline[1]); 34 int[] varr = new int[n]; 35 int[] tarr = new int[n]; 36 for (int i = 0; i < n; i++) { 37 String line1 = sc.nextLine(); 38 String[] sl = line1.split(" "); 39 varr[i] = Integer.parseInt(sl[0]); 40 tarr[i] = Integer.parseInt(sl[1]); 41 } 42 // for(int k:varr) 43 // System.out.println(k); 44 System.out.println(tianMi(varr,tarr,v,n)); 45 } 46 public static int tianMi(int[] varr,int[] tarr,int v,int n) { 47 int maxm=1000; 48 int k=0; 49 int tianmi=0; 50 int[] f=new int[maxm]; 51 // int[] c=new int[maxm]; 52 // int[] w=new int[maxm]; 53 for(int i=0;i<n;i++) { 54 for(k=varr[i];k<=v;k++) 55 f[k]=Math.max(f[k-varr[i]]+tarr[i],f[k]); 56 } 57 tianmi=f[v]; 58 return tianmi; 59 } 60 61 }