動態規劃——完全揹包問題

問題

在這裏插入圖片描述

源碼

/*
* problem: 完全揹包
* method: 動態規劃
* date: 2020/05/11
*/
#include<iostream>
#include<string.h>
using namespace std;
const int MAX_N=100;
const int MAX_W=10000;
int w[MAX_N]= {3,4,2};
int v[MAX_N]= {4,5,3};
int dp[MAX_N+1][MAX_W+1];
int x[MAX_N];
int N=3;
int W=7;
void solve() {
 int i,j;
 memset(dp,0,sizeof(int)*(N+1)*(W+1));
 for(i=1; i<=N; i++) {
  for(j=1; j<=W; j++) {
   if(w[i-1]>j) {
    dp[i][j]=dp[i-1][j];
   } else {
    dp[i][j]=max(dp[i-1][j],dp[i][j-w[i-1]]+v[i-1]);
   }
  }
 }
 for(i=N,j=W; i>0||j>0;) {
  if(dp[i][j]==dp[i-1][j])    i--;
  else {
   j-=w[i-1];
   x[i-1]++;
  }
 }
}
int main() {
 int i,j;
 solve();
 cout<<dp[N][W]<<"(";
 for(i=0; i<N; i++) {
  cout<<i+1<<"號物品選"<<x[i]<<"個,";
 }
 cout<<"\b)"<<endl;
 for(i=0;i<=N;i++){
  for(j=0;j<=W;j++){
   cout<<dp[i][j]<<" ";
  }
  cout<<endl;
 }
 return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章