hdoj2602 01背包

来源:互联网 发布:淘宝可用微信付款吗 编辑:程序博客网 时间:2024/06/04 18:14

记忆化搜索:

#include"iostream"#include"algorithm"using namespace std;int volume[1200];int value[1200];int n,v;int f[1200][1200];int solve(int id,int cap){if(f[id][cap]!=-1)return f[id][cap];else{int res;if(id==n)res=0;else if(volume[id]>cap)res=solve(id+1,cap);else res=max(solve(id+1,cap),solve(id+1,cap-volume[id])+value[id]);f[id][cap]=res;return f[id][cap]=res;}}int main(){int t;cin>>t;while(t--){cin>>n>>v;memset(f,-1,sizeof(f));for(int i=0;i<n;i++)cin>>value[i];for(int i=0;i<n;i++)cin>>volume[i];cout<<solve(0,v)<<endl;}return 0;}


#include"iostream"#include"algorithm"using namespace std;const int volume=20000;const int num=2000;int main(){//freopen("a.txt","r",stdin);int T,N,V;int i,v;int f[volume];int c[num];int w[num];cin>>T;while(T--){   cin>>N>>V;   memset(c,0,sizeof(c));   memset(w,0,sizeof(w));   memset(f,0,sizeof(f));   for(i=1;i<=N;i++)   {   cin>>w[i];   }   for(i=1;i<=N;i++)   {   cin>>c[i];   }   for(i=1;i<=N;i++)   {   for(v=V;v>=c[i];v--)   if(f[v-c[i]]+w[i]>f[v])//if(max(f[v],f[v-c[i]]+w[i])>f[v])       f[v]=f[v-c[i]]+w[i];   }   cout<<f[V]<<endl;}return 0;}

0 0
原创粉丝点击