求助:01背包递归DP
c++吧
全部回复
仅看楼主
level 4
喝酒123456 楼主
应该是做记录的问题,可我实在不知错在哪,55
#include <iostream>
using namespace std;
int weight[100],price[100],recond[1001][100]={0},num;
int best(int most,int money,int i)
{
     if(recond[most][i]) return recond[most][i];
     else if(most-weight[i]<0&&i==num-1) return recond[most][i]=money;
     else if(most-weight[i]<0) return recond[most][i]=best(most,money,i+1);
     else if(i==num-1) return recond[most][i]=money+price[i];
     else return recond[most][i]=
     max
     (
         recond[most-weight[i]][i+1]=best(most-weight[i],money+price[i],i+1),
         recond[most][i+1]=best(most,money,i+1)
     );
}
int main()
{
     int most,i;
     cin>>most>>num;
     for(i=0;i<num;i++) cin>>weight[i]>>price[i];
     cout<<best(most,0,0);
     system("pause");
}

2010年11月14日 13点11分 1
1