01背包(DP入门)

n个重量和价值分别为w, v的物品。找出总重量不超过W 的物品,求所有挑选方案中价值总和的最大值。

n=4;

(w,v)={(2,3),(1,2),(3,4),(2,2)}

W=5;

 

输出:7    (选0号,1号,3号)

理解:

//n个物品 背包容量W 
//int w[max_n],v[max_n];    weight,value; 



//暴搜  O(2^n)
int rec(int i,int j){ 
	int res;               
	if(i==n){
		res=0;
	}
	else if(j=0){
		return dp[i][j];
	}
	int res;
	if(i==n){
		res=0;
	}
	else if(j=w[i];j--){
			dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
		}
	}
	cout<

 

最终代码 :

#include 
using namespace std;
const int MAX_N=10000;
int n,W; 
int w[MAX_N],v[MAX_N];
int dp[MAX_N+1];
void solve(){
	for(int i=0;i=w[i];j--){
	   	dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
		   }
	   }
	printf("%d\n",dp[W]);
}
int main(){
	scanf("%d %d",&n,&W);
	for(int K=0;K

 

你可能感兴趣的:(基础模板,动态规划)