背包问题
动态规划解决背包问题!
今天做奇安信的笔试题,突然明白了这种题该怎么做。
题大致是这样的: 总金钱 有多种产品,每种产品有价格和价值,问总金钱数能够达到的最大价值是多少???
一个约束条件: 总金钱 (购买的产品的价格要小于等于总金钱数 )
用动态规划!!!! (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; } }
也许会有遗憾,但是不应该在失败之前
浙公网安备 33010602011771号