采药

 

http://ybt.ssoier.cn:8088/problem_show.php?pid=1932

 

采药dp

#include<bits/stdc++.h>
using namespace std;
int t,m,w[105],v[105],f[105][1005];
int main()
{
  cin>>t>>m;
  for(int i=1; i<=m; i++)
    cin>>w[i]>>v[i];
  for(int i=1; i<=m; i++)
  {
    for(int j=t; j>=0; j--)
    {
      if(j>=w[i])
        f[i][j]=max(f[i-1][j-w[i]]+v[i],f[i-1][j]);
      else f[i][j]=f[i-1][j];
    }
  }
  cout<<f[m][t];
}

 

采药4

//  http://www.jzoj.cn/problem.php?id=1746  
// 30%
# include <bits/stdc++.h>
using namespace std;
int n,a[101];
int W,w[101],v[101],maxv;
int tw,tv;
int rest(int dep){
    int s=0;
    for(int i=dep;i<=n;i++) s+=v[i];
    return s;
}
void dfs(int dep){
   if(dep>n) //方案处理,计算这个方案的总重量和总价值
   {
      if(tv>maxv) maxv=tv;    
   }
   else{
        for(int i=0;i<=1;i++){
              a[dep]=1-i;
              if(tw+a[dep]*w[dep]<=W && tv+a[dep]*v[dep]+rest(dep+1)>maxv  ){
                  tw+=a[dep]*w[dep];
                tv+=a[dep]*v[dep];
                dfs(dep+1);
                tw-=a[dep]*w[dep];
                tv-=a[dep]*v[dep];
              }
            }
    }
}
int main(){
   cin>>W>>n;
   for(int i=1;i<=n;i++)   cin>>w[i]>>v[i];
   dfs(1);
   cout<<maxv<<endl;
   return 0 ;
}

 

采药3

//  http://www.jzoj.cn/problem.php?id=1746  
// 25%
# include <bits/stdc++.h>
using namespace std;
int n,a[101];
int W,w[101],v[101],maxv;
int tw,tv;
void dfs(int dep){
   if(dep>n) //方案处理,计算这个方案的总重量和总价值
   {
      if(tv>maxv) maxv=tv;    
   }
   else{
        for(int i=0;i<=1;i++){
              a[dep]=1-i;
              if(tw+a[dep]*w[dep]<=W){
                  tw+=a[dep]*w[dep];
                tv+=a[dep]*v[dep];
                dfs(dep+1);
                tw-=a[dep]*w[dep];
                tv-=a[dep]*v[dep];
              }
            }
    }
}
int main(){
   cin>>W>>n;
   for(int i=1;i<=n;i++)  cin>>w[i]>>v[i];   
   dfs(1);
   cout<<maxv<<endl;
   return 0 ;
}

采药2

//  http://www.jzoj.cn/problem.php?id=1746  
// 20%
# include <bits/stdc++.h>
using namespace std;
int n,a[101];
int W,w[101],v[101],maxv;
void dfs(int dep){
   if(dep>n) //方案处理,计算这个方案的总重量和总价值
   {
           int tw=0,tv=0;
           for (int i=1;i<=n;i++) {
           tw+=a[i]*w[i];
              tv+=a[i]*v[i];
          }
        if(tw<=W && tv>maxv) {
            maxv=tv;
        }
   }
   else{
        for(int i=0;i<=1;i++){
              a[dep]=1-i;
                dfs(dep+1);
            }
    }
}
int main(){
   cin>>W>>n;
   for(int i=1; i<=n; i++)  cin>>w[i]>>v[i];
   dfs(1);
   cout<<maxv<<endl;
   return 0 ;
}

采药1

# include <bits/stdc++.h>
using namespace std;
int n,a[101];
void dfs(int dep){
   if(dep>n){
       for (int i=1;i<=n;i++) cout<<a[i];
       cout<<endl;
   }
   else{
        for(int i=0;i<=1;i++){
              a[dep]=1-i;
                dfs(dep+1);
            }
    }
}
int main(){
   cin>>n;
   dfs(1);
   return 0 ;
}

采药0

# include <bits/stdc++.h>
using namespace std;
int n,a[101];
void dfs(int dep){
   if(dep>n){
       for (int i=1;i<=n;i++) cout<<a[i];
       cout<<endl;
   }
   else{
                 a[dep]=1;
                dfs(dep+1);
                a[dep]=0;
                dfs(dep+1);        
    }
}
int main(){
   cin>>n;
   dfs(1);
   return 0 ;
    return 0;
}

posted @ 2023-07-21 14:20  郁佳彬  阅读(44)  评论(0)    收藏  举报