동적 기획 해결 01 가방 문제 (java 실현)
5954 단어 알고리즘 필기시험 문제
package com.bc;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
int allweight=12; //
int num=8; //
bao[] baos=new bao[num+1];
baos[1]=new bao(2, 13);
baos[2]=new bao(1, 10);
baos[3]=new bao(3, 24);
baos[4]=new bao(2, 15);
baos[5]=new bao(4, 28);
baos[6]=new bao(5, 33);
baos[7]=new bao(3, 20);
baos[8]=new bao(1, 8);
int[][] dp=new int[num+1][allweight+1];
//
for(int i=0;i<=num;i++)
{
for(int j=0;j<=allweight;j++)
{
if(i==0||j==0)
{
dp[i][j]=0;
}else {
if (j1][j];
}else {
int value=baos[i].getValue();
int weight=baos[i].getWeight();
dp[i][j]=Math.max(dp[i-1][j-weight]+value,dp[i-1][j]);
}
}
System.out.println("dp"+"["+i+"]"+"["+j+"]"+dp[i][j]);
}
}
int m=num;
int n=allweight;
int all=dp[m][n];
//
while(all>=0)
{
if (m>0&&dp[m][n]==dp[m-1][n]) {
m=m-1;
}else {
System.out.println(baos[m]+" ");
m=m-1;
if (m==0) {
return;
}else {
n=n-baos[m].getWeight();
all=all-baos[m].getWeight();
}
}
}
}
}