题目:
思路:01背包的变形。
T代表总共能够用来采药的时间,相当于背包容量。M 代表山洞里的草药的数目,相当于物品数量。
代码:
package Donggui;
import java.util.Scanner;
public class LG采药 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();//能用的总时间
int m=sc.nextInt();//药的数量
int[] w=new int[m+1];//每个药的时间
int[] v=new int[m+1];//每个药的价值
for (int i = 1; i <= m; i++) {
w[i]=sc.nextInt();
v[i]=sc.nextInt();
}
System.out.println(dp(m,t,w,v));
}
private static int dp(int m,int t,int w[],int v[]) {
int[][] dp=new int[m+1][t+1];
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= t; j++) {
if (j>=w[i]){
dp[i][j]=Math.max(v[i]+dp[i-1][j-w[i]],dp[i-1][j]);
}else
dp[i][j]=dp[i-1][j];
}
}
return dp[m][t];
}
}