题目大意:一道混合背包模板。

解题思路:分三种情况讨论,01和完全没什么问题,多重背包需要把物品分成$\log W[i]$件,然后01即可,分成W[i]件01会TLE。

读优大法好!

C++ Code:

#include<cstdio>
#include<cctype>
using namespace std;
#define max(i,j)(((i)>(j))?(i):(j))
char buf[4000004];
int bufpos;
inline void init(){
bufpos=0;
buf[fread(buf,1,4000000,stdin)]='\0';
}
inline int readint(){
int p=0,flag=false;
for(;!isdigit(buf[bufpos]);bufpos++)flag=(buf[bufpos]=='-');
for(;isdigit(buf[bufpos]);bufpos++)
p=(p<<3)+(p<<1)+buf[bufpos]-'0';
return (flag)?(-p):(p);
}
int n,v,f[200002];
int main(){
init();
n=readint(),v=readint();
while(n--){
int V=readint(),W=readint(),M=readint();
if(M==1)
for(int i=v;i>=V;--i)
f[i]=max(f[i],f[i-V]+W);
else
if(M==-1)
for(int i=V;i<=v;++i)
f[i]=max(f[i],f[i-V]+W);
else{
int k=1,p=1;
while(p<=M){
for(int i=v;i>=V*k;--i)
f[i]=max(f[i],f[i-V*k]+W*k);
p+=(k*=2);
}
p=M-p+k;
for(int i=v;i>=V*p;--i)
f[i]=max(f[i],f[i-V*p]+W*p);
}
}
printf("%d\n",f[v]);
return 0;
}

最新文章

  1. bootstrap内置网格式布局系统:
  2. 怎样制作FL Studio步进音序器中的节奏
  3. Spring入门学习(一)
  4. SIGGRAPH
  5. 一个简单的JUnit项目
  6. android 安卓 微信布局 [1]
  7. [html5] 学习笔记-Canvas应用
  8. Debug 运行正常,Release版本不能正常运行总结(转)
  9. ThinkPad安装deepin操作系统报错解决方法
  10. int*p[ ]与int(*p)[ ]的不同
  11. springboot~thymeleaf页面布局的步骤
  12. git添加/删除远程仓库
  13. Cron表达式解析
  14. Boost 和 Boost.Build 的设置
  15. JavaEE之JDBC编程[详解]
  16. python-类型转化
  17. quratz启动流程
  18. Delphi XE5 Android 调用手机震动
  19. linux shell脚本报错总结
  20. CentOS扩展库配置

热门文章

  1. Kattis - Virtual Friends(并查集)
  2. luogu p1003
  3. postgressql sql查询拼接多个字段为一个字段查询出来
  4. 如何保证 Linux 服务器的安全
  5. windows下Word使用-快捷键
  6. 利用Arcade表达式显示多行标签
  7. JS深拷贝拷贝的区别?
  8. CF735E Ostap and Tree
  9. 【BZOJ 1486】 [HNOI2009]最小圈
  10. [terry笔记]Python字符串