dp问题总结
(1)背包问题
0-1背包问题
int[] dp=new int[target+1];
for(int i=0;i<n;i++){
for(int j=target;j>=w[i];j--){
dp[j]=Math.max(dp[j],dp[j-w[i]]+v[i]);
}
}
完全背包问题
int[] dp=new int[target+1];
for(int i=0;i<n;i++){
for(int j=w[i];j<=target;j++){
dp[j]=Math.max(dp[j],dp[j-w[i]]+v[i]);
}
}
多重背包问题
static class Node{
int a;
int b;
public Node(int a, int b) {
this.a = a;
this.b = b;
}
}
List<Node> list=new ArrayList<>();
String[] strings=br.readLine().split(" ");
int n=Integer.parseInt(strings[0]);
int m=Integer.parseInt(strings[1]);
for(int i=0;i<n;i++){
strings=br.readLine().split(" ");
int a=Integer.parseInt(strings[0]);
int b=Integer.parseInt(strings[1]);
int c=Integer.parseInt(strings[2]);
for(int k=1;k<=c;k=k*2){
c-=k;
list.add(new Node(k*a,k*b));
}
if(c>0){
list.add(new Node(c*a,c*b));
}
}
for(Node p:list){
for(int j=m;j>=p.a;j--){
dp[j]=Math.max(dp[j],dp[j-p.a]+p.b);
}
}
System.out.println(dp[m]);
}
dp背包问题总结
最新推荐文章于 2024-10-18 23:42:37 发布