《01-背包问题-点菜》

时间:2022-07-25
本文章向大家介绍《01-背包问题-点菜》,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

解决代码

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     
 5     //身上拥有的钱
 6     private static int M;
 7     //拥有的测试用例
 8     private static int N;
 9     //用例记录每道菜的价格
10     private static int [] array =new  int [1001];
11     //记录方案
12     private static int [][] V = new int [1001][1001];
13     
14     
15     public static void main(String[] args) {
16         
17         Scanner in = new Scanner(System.in);
18         N = in.nextInt();
19         M = in.nextInt();
20         for(int i = 1;i<=N;i++)
21         {
22             array[i] = in.nextInt();
23         }
24         FindTotal();
25         
26     }
27     
28     public static void FindTotal()
29     {
30         for(int i = 1;i<=N;i++)
31         {
32             for(int j = 1;j<=M;j++){
33                 //如果钱刚好够用  方案总数等于  没有这个菜品时候的方案总数+1
34                 if(j==array[i]){
35                     V[i][j]=V[i-1][j]+1;
36                 }
37                 
38                 //如果钱够用的话,总的方案数目  等于吃这道菜的方案数目+不吃这道菜的方案数目
39                 if(j>array[i]){
40                     V[i][j] = V[i-1][j]+V[i-1][j-array[i]];
41                 }
42                 
43                 //如果钱不够用的情况 、等于不选这道菜的所有情况
44                 if(j<array[i]){
45                     V[i][j] = V[i-1][j];
46                 }
47             }
48         }
49         
50         System.out.println(V[N][M]);
51     }
52 
53 }