前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《01-背包问题-点菜》

《01-背包问题-点菜》

作者头像
梅花
发布2020-09-28 10:29:46
5350
发布2020-09-28 10:29:46
举报

解决代码

 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 }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档