BZOJ 5390: [Lydsy1806月赛]糖果商店
2024-09-07 14:38:43
F[i][j]表示总重量为i,最上面那个盒子中糖果种类为j的方案数
每次新加一个盒子,或者在原来盒子中加入一个糖
F[i][0]为中间状态,优化转移(表示最上面那个盒子不能加糖果)
#include<cstdio>
#include<algorithm>
using namespace std;
int d[1000005],w[1000005],v[1000005],l[1000005];
long long F[100005][105];
int main(){
int N,m,n=0;
scanf("%d%d",&N,&m);
for (int i=1; i<=m; i++) scanf("%d",&d[i]);
for (int i=1; i<=N; i++){
int W,V,L;
scanf("%d%d%d",&W,&V,&L);
if (1ll*W*L<=m){
n++;
w[n]=W;
v[n]=V;
l[n]=L;
}
}
for (int i=0; i<=m; i++)
for (int j=0; j<=n; j++)
F[i][j]=-1ll<<60;
F[0][0]=0;
for (int i=0; i<=m; i++)
for (int j=n; j>=0; j--)
if (F[i][j]!=-1ll<<60){
if (!j){
for (int k=1; k<=n; k++)
if (i+w[k]*l[k]<=m) F[i+w[k]*l[k]][k]=max(F[i+w[k]*l[k]][k],F[i][j]+1ll*v[k]*l[k]-d[i]);
}
else{
if (i+w[j]<=m) F[i+w[j]][j]=max(F[i+w[j]][j],F[i][j]+v[j]);
F[i][0]=max(F[i][0],F[i][j]);
}
}
long long ans=0;
for (int i=1; i<=m; i++){
for (int j=0; j<=n; j++) ans=max(ans,F[i][j]);
printf("%lld ",ans);
}
return 0;
}
最新文章
- kali Linux添加add-apt-repository
- git 忽略提交某个指定的文件(不从版本库中删除)
- jsonP跨域调用
- java集合-HashMap
- python range() 和xrange()的区别
- props
- 【ASP.NET Web API教程】6.4 模型验证
- 宠物AI(个人觉得有问题)
- 给Sublime Text2安装轻量级代码提示插件:SublimeCodeIntel
- java1200例-文字的探照灯效果
- Eclipse + PyDev 无法导入模块
- LeetCode 48 Anagrams
- 个人作业2 英语学习APP分析
- C语言缓冲区(缓存)详解
- [基础常识]申请免费SSL证书 - 阿里云云盾证书 - Digicert+Symantec 免费型DV SSL
- Mysql千万级大表优化
- MySQL数据库安装配置
- NODE_ENV不是内部或外部命令,也不是可运行的程序
- 报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1
- 递归&;栈帧空间
热门文章
- .NET资源站点汇总~
- 电脑Bois中usb模式启动热键
- 【转】monkey实战--测试步骤、常用参数、常规monkey命令
- If you can&#39;t take it, don&#39;t dish it out.
- MapReduce的编程思想(1)
- 如何在Android Studio中导入JNI生成的.so库
- zfs和ufs文件系统
- CentOS7.2上安装Python3.6
- 2018.2.28 PHP中使用jQuery+Ajax实现分页查询多功能如何操作
- opencv中mat矩阵如何debug