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

给出了一些砖块,砖块有高度,最高可以达到的高度(高度限制)和数量,问可以用这些砖块堆的最大高度

 

 

 f[i][j] 考虑前i块,能否堆出高度为j 

 

 f[i][j] | =f[i-1][j-k*h[i] ] 

 

注意先排个序,按照 limit[i] 从小到大 枚举 j

 

复制代码
 #include <iostream>
 #include <cstring>
 #include <algorithm>
 using namespace std; 
  const int M=4e4+4;
  int n,f[403][M];
  
  struct T{
      int h,lmt,num;
  }a[403];
  int cmp(T &x,T &y){
      return x.lmt<=y.lmt;
  }
 int solve(){
     int i,j,k;
     
     memset(f,0,sizeof f);
     for(i=1;i<=n;i++) cin>>a[i].h>>a[i].lmt>>a[i].num;
     sort(a+1,a+1+n,cmp);
     f[0][0]=1;
     for(i=1;i<=n;i++)
      for(j=0;j<=a[i].lmt;j++)
       for(k=0;k<=a[i].num&&j>=a[i].h*k;k++)
          f[i][j] |=f[i-1][j-a[i].h*k];
      
      for(j=a[n].lmt;j>=0;j--)
       if(f[n][j]) return j; 
 }
 signed main(){
     cin>>n; cout<<solve();
 }
 
 
 
复制代码

 

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