1. 程式人生 > >會超時的dfs01背包+快一點的一維DP01背包

會超時的dfs01背包+快一點的一維DP01背包

iostream return end ret ostream .cn img nbsp style

( ⊙ o ⊙ ) 題目:

技術分享

(⊙v⊙),代碼:

1.dfs

//會超時!!!! 
#include<iostream>
#include<cstdio>
using namespace std;

int n,t,ans;
int w[1003],v[1003];

void dfs(int x,int val,int left) {
    if(x == n+1){
        ans = max(ans,val);
        return ;
    }
    dfs(x+1,val,left);
    if(left >= w[x]) dfs(x+1
,val + v[x],left - w[x]); } int main() { cin>>n>>t; for(int i=1; i<=n; i++) cin>>w[i]>>v[i]; dfs(1,0,t); cout<<ans<<endl; return 0; }

2.dp

#include<iostream>
#include<cstdio>
using namespace std;

int n,V;
int val[1333],wight[1333],f[1333]; int main() { cin>>V>>n; for(int i=1; i<=n; i++) { cin>>wight[i]>>val[i]; } for(int i=1; i<=n; i++) { for(int j=V; j>=0; j--) { if(j >= wight[i]) f[j] = max(f[j],f[j-wight[i]]+val[i]); } } cout
<<f[V]<<endl; return 0; }

會超時的dfs01背包+快一點的一維DP01背包