#include<iostream>
using namespace std;
int w[] = {0,2,3,4,7};
int v[] = {0,1,3,5,9};
const int Cap = 10;
int m[Cap+1][Cap+1] = {0};
int N = 4;
void show();
int pack01(){
//https://www.cnblogs.com/Christal-R/p/Dynamic_programming.html
for(int i=1;i<=4;i++){
// for(int j=1;j<=Cap;j++){
for(int j=Cap;j>0;j--){
if(j<w[i]){
m[i][j] = m[i-1][j];
}else{
m[i][j] = max(m[i-1][j],m[i-1][j-w[i]]+v[i]);
}
cout<<i<<" "<<j<<endl;
cout<<v[i]<<" "<<w[i]<<endl;
show();
}
}
}
int m2[10] = {0};
int pack01_2(){
for(int i=1;i<=4;i++){
for(int j=Cap;j>0;j--){
if(j < w[i]){
m2[j] = m2[j];
}else{
m2[j] = max( m2[j], m2[j-w[i]] + v[i]);
}
cout<<i<<" "<<j<<endl;
cout<<m2[j-w[i]] + v[i]<<endl;
for(int i=0;i<=Cap;i++)
cout<<m2[i]<<" ";
cout<<endl;
}
}
}
void show(){
for(int i=0;i<=4;i++){
for(int j=0;j<=Cap;j++){
cout<<m[i][j]<<" ";
}
cout<<endl;
}
cout<<"----------------"<<endl;
}
int goback(){
int i=N,j=Cap;
cout<<m[i][j]<<endl;
while(i>0 && j>0){
cout<<i<<" "<<j<<" "<<m[i][j]<<endl;
if(m[i][j] == m[i-1][j]){
i--;
}else{
cout<<"choosen: "<<v[i]<<" "<<w[i]<<endl;
j -= w[i];
i--;
}
}
}
int packfull(){
// https://blog.csdn.net/lee371042/article/details/79235538
for(int i=1;i<=4;i++){
for(int j=1;j<=Cap;j++){
// for(int k=0;k*w[i]<=j;k++)
// m[i][j] = max(m[i][j],m[i-1][j-k*w[i]]+k*v[i]);
if(j<w[i]){
m[i][j] = m[i-1][j];
}else{
m[i][j] = max(m[i-1][j],m[i][j-w[i]]+v[i]);
cout<<i<<" "<<j<<endl;
cout<<v[i]<<" "<<w[i]<<endl;
show();
}
}
}
int main(){
// pack01();
// pack01_2();
// goback();
packfull();
}
再次怀疑我的智商