随笔 - 531  文章 - 0  评论 - 3  阅读 - 10215 

复杂度 n^2 * logn

 

 类似倍增, 将 num[i] 拆为 1+2+4+ .... ,这样取物品i 时,可以一次多取一些

复制代码
 #include <iostream>
 #include <cstring>
 #include <algorithm>
 using namespace std; 
  const int N=600,M=1e4;
  int n,m,w[N],v[N],p[N],f[M];
  void sov(){
      int i,j,k;
      for(i=1;i<=n;i++){
          int t=p[i];
          for(k=1;k<=t;k<<=1){
              for(j=m;j>=k*w[i];j--){
                 f[j]=max(f[j],f[j-k*w[i]]+k*v[i]);
               }
            t-=k;
          }
          if(t){
              for(j=m;j>=t*w[i];j--)
                f[j]=max(f[j],f[j-t*w[i]]+t*v[i]);
          }
      }
      cout<<f[m];
  }
 signed main(){
     cin>>n>>m; 
     for(int i=1;i<=n;i++) cin>>w[i]>>v[i]>>p[i];
     sov();
 }
 
 
 
复制代码

 

posted on   towboat  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示