背包问题

动态规划解决背包问题!

  今天做奇安信的笔试题,突然明白了这种题该怎么做。

  题大致是这样的: 总金钱   有多种产品,每种产品有价格和价值,问总金钱数能够达到的最大价值是多少???

    一个约束条件: 总金钱  (购买的产品的价格要小于等于总金钱数 )

    用动态规划!!!! (dp[ i ] 表示总金钱为 i 的时候,能够达到的最大价值 )

  这种题就是用遍历的方式来做的!! 遍历所有的可能来找到最值。

class Main{
    int fun(){
        Scanner scanner=new Scanner(System.in);
        int totalMoney=scanner.nextInt();
        int num=scanner.nextInt();
        int[][]arr=new int[num][2];
        for(int i=0;i<arr.length;i++){
            arr[i][0]=scanner.nextInt();
            arr[i][1]=scanner.nextInt();
        }
        int[]dp=new int[totalMoney+1];
        int res=0;
        for(int i=0;i<dp.length;i++){
        // 遍历每个商品
for(int j=0;j<num;j++){
if(i+arr[j][0]<=totalMoney){ dp[i+arr[j][0]]=Math.max(dp[i+arr[j][0]],dp[i]+arr[j][1]); if(dp[i+arr[j][0]]>res) res=dp[i+arr[j][0]]; } } } return res; } }

 

posted @ 2020-08-01 18:44  你眼里的星辰  阅读(87)  评论(0)    收藏  举报