背包问题 (记忆化搜索)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了背包问题 (记忆化搜索)相关的知识,希望对你有一定的参考价值。
使用记忆化搜索,可大大提升时间效率....
1 int n,W;//n为重量 2 int w[MAX],v[MAX]; 3 int dp[MAX][MAX]; 4 5 //从第i个物品开始挑选总重小于j的部分 6 int rec(int i,int j) 7 { 8 //记忆化搜索 9 /*if(dp[i][j] >= 0){ 10 return dp[i][j]; 11 }*/ 12 int rec; 13 if(i==n){ 14 //已经没有剩余物品了 15 rec=0; 16 } 17 else if(j<w[i]){ 18 //无法挑选这个物品 19 rec=rec(i+1,j); 20 } 21 else{ 22 //挑选和不挑选的两种情况都尝试一下 23 rec=max(rec(i+1,j),rec(i+1,j-w[i])+v[i]); 24 } 25 return rec; //return dp[i][j]=rec; 将结果记录在数组里 26 } 27 28 void solve() 29 { 30 //用-1表示尚未计算过,初始化整个数组 31 //memset(dp,-1,sizeof(dp)); 32 printf("%d\n",rec(0,W)); 33 }
以上是关于背包问题 (记忆化搜索)的主要内容,如果未能解决你的问题,请参考以下文章