单调队列优化的DP

单调队列优化的DP

k递增,calc递减的单调队列

# include <bits/stdc++.h>
using namespace std;

struct rec{ int L,P,S; } a[110];
int N,M,f[110][16010],q[16010];
bool operator < (rec a,rec b){
   return a.S<b.S;
}
int calc(int i,int k){
   return f[i-1][k]-a[i].P*k;
}
int main()
{
   scanf("%d%d",&N,&M);
   for(int i=1;i<=M;++i){
       scanf("%d%d%d",&a[i].L,&a[i].P,&a[i].S);
  }
   sort(a+1,a+1+M);
   for(int i=1;i<=M;++i){
       int L=1,R=0; //L为对头,R为队尾
       for(int k=max(0,a[i].S-a[i].L);k<=a[i].S-1;++k){//入队操作
           while(L<=R&&calc(i,q[R])<=calc(i,k)) R--; //淘汰不优的决策
           q[++R]=k;
      }
       for(int j=1;j<=N;++j){
           f[i][j]=max(f[i-1][j],f[i][j-1]);
           if(j>=a[i].S){
               while(L<=R&&q[L]<j-a[i].L) L++; //剔除已死亡的决策
               if(L<=R) f[i][j]=max(f[i][j],calc(i,q[L])+a[i].P*j);
          }
      }
  }
   printf("%d\n",f[M][N]);

   return 0;
}

多重背包优化 O(N*M)

acwing 多重背包

# include <bits/stdc++.h>
using namespace std;

const int MAXN=1e5+100;
int V[MAXN],W[MAXN],C[MAXN];
int f[MAXN],q[MAXN];
int N,M;
int calc(int i,int u,int k)
{
   return f[u+k*V[i]]-k*W[i];
}
int main()
{
   scanf("%d%d",&N,&M);
   memset(f,0,sizeof(f));
   f[0]=0;
   for(int i=1;i<=N;++i){
       scanf("%d%d%d",&V[i],&W[i],&C[i]);
       for(int u=0;u<V[i];++u){
           int L=1,R=0;
           int maxp=(M-u)/V[i];
           for(int k=maxp-1;k>=max(maxp-C[i],0);k--){ //最初的入队
               while(L<=R&&calc(i,u,q[R])<=calc(i,u,k)) R--;
               q[++R]=k;
          }
           for(int p=maxp;p>=0;p--){
               while(L<=R&&q[L]>p-1) L++;
               if(L<=R){
                   f[u+p*V[i]]=max(f[u+p*V[i]],calc(i,u,q[L])+p*W[i]);
              }
               if(p-C[i]-1>=0){
                   while(L<=R&&calc(i,u,q[R])<=calc(i,u,p-C[i]-1)) R--;
                   q[++R]=p-C[i]-1;
              }
          }
      }
  }
   int ans=0;
   for(int i=1;i<=M;++i) ans=max(ans,f[i]);
   printf("%d\n",ans);
   return 0;
}



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