标签:
使用记忆化搜索,可大大提升时间效率....
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 }
标签:
原文地址:http://www.cnblogs.com/wangmengmeng/p/5228812.html