AcWing 7. 混合背包问题
2024-08-30 00:20:04
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std ;
const int N=;
int f[N],g[N],q[N];
int n,m;
int a[N];
int main() {
cin>>n>>m;
for(int i=; i<=n; i++) {
int v,w,s;
cin>>v>>w>>s;
if(s==) { //完全背包
for(int j=v; j<=m; j++)
f[j]=max(f[j],f[j-v]+w);
} else {
if(s==-)//如果是01背包
s=;//换成s就只有1
memcpy(g,f,sizeof f);
for(int j=; j<v; j++) {
int hh=,tt=-;
for(int k=j; k<=m; k+=v) {
if(hh<=tt&&q[hh]<k-s*v)
hh++;
if(hh<=tt)
f[k]=max(f[k],g[q[hh]]+(k-q[hh])/v*w);
while(hh<=tt&&g[q[tt]]-(q[tt]-j)/v*w<=g[k]-(k-j)/v*w)
tt--;
q[++tt]=k;
}
}
}
}
cout<<f[m]<<endl;
return ;
}
最新文章
- HTML5 地理位置定位(HTML5 Geolocation)原理及应用
- 初识canvas,使用canvas做一个百分比加载进度的动画
- windows server 远程连接设置
- java的string常用操作
- kettle使用log4j管理输出日志
- Javascript动态加载Html元素到页面Dom文档结构时执行顺序的不同
- 如何让div水平垂直居中
- poj - 2774 - Long Long Message
- JNI编程(二) —— 让C++和Java相互调用(1)
- android中使用setVideoURI()播放视频
- TableLayout中怎么填充相同的布局
- 更好的抽屉效果(ios)
- WordPress在Centos下Apache设置伪静态方法
- 利用树莓派来安装opencv从而来调动摄像头工作(没有坑,超超自己试过)
- Git入门到高级系列2-git高级操作
- html5 required属性的注意事项
- C#基础知识回顾--串行化与反串行化
- 翻译:探索GLSL-用几何着色器(着色器库)实现法线可视化
- 深入分析tcp close与shutdown
- ASP.NET mvc下在Controller下action的跳转方式