背包模板(01背包,完全背包,多重背包) 一、01背包: #define N ..///N这个值是根据具体的题目来定的 int v; ///v为总的容量 int dp[N]; void ZeroOnePack(int cost,int weight) { for(int j=v;j>=cost;j--) ///注意是逆序的 dp[j]=max(dp[j],dp[j-cost]+weight); } 二、完全背包: #define N ..///N这个值是根据具体的题目来定的 int v; ///v为总的容量 int dp[N]; void CompletePack(int cost,int weight) { for(int j=cost;j<=v;j++) ///注意是顺序的 dp[j]=max(dp[j],dp[j-cost]+weight); } 三、多重背包: #define N ..///N这个值是根据具体的题目来定的 int v; ///v为总的容量 int dp[N]; void MultiplePack(int cost,int weight,int amount){ if(cost*amount>=v) CompletePack(cost,weight); else { int k=1; while(k<amount) { ZeroOnePack(k*cost,k*weight); all-=k; k+=k; } ZeroOnePack(amount*cost,amount*weight); } }