博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 5441 [Ceoi2018]Cloud computing
阅读量:5915 次
发布时间:2019-06-19

本文共 1404 字,大约阅读时间需要 4 分钟。

题目链接

题解

按照频率排序后转化成背包问题。

代码

#include 
#include
#include
int read(){ int x=0,f=1; char ch=getchar(); while((ch<'0')||(ch>'9')) { if(ch=='-') { f=-f; } ch=getchar(); } while((ch>='0')&&(ch<='9')) { x=x*10+ch-'0'; ch=getchar(); } return x*f;}const int maxn=2000;const int maxm=50;struct query{ int c,f,v; bool operator <(const query &other) const { if(f==other.f) { return v
other.f; }};long long f[maxn*maxm+10],ans;int n,m,tot;query q[maxn*2+10];int main(){ n=read(); for(int i=1; i<=n; ++i) { q[i].c=read(); q[i].f=read(); q[i].v=-read(); } m=read(); for(int i=1; i<=m; ++i) { q[n+i].c=-read(); q[n+i].f=read(); q[n+i].v=read(); } std::sort(q+1,q+n+m+1); memset(f,-63,sizeof f); f[0]=0; for(int i=1; i<=n+m; ++i) { if(q[i].c>0) { for(int j=tot; j>=0; --j) { f[j+q[i].c]=std::max(f[j+q[i].c],f[j]+q[i].v); } tot+=q[i].c; } else { for(int j=0; j-q[i].c<=tot; ++j) { f[j]=std::max(f[j],f[j-q[i].c]+q[i].v); } } } for(int i=0; i<=tot; ++i) { ans=std::max(ans,f[i]); } printf("%lld\n",ans); return 0;}

转载于:https://www.cnblogs.com/Canopus-wym/p/10376143.html

你可能感兴趣的文章
GoLang 变量作用域
查看>>
JavaFX “即时搜索” 示例
查看>>
MongoDB分片+复制集
查看>>
vue 将echarts封装为组件一键使用
查看>>
Raffi Krikorian 为“在运行中进行架构重写”提供了指南
查看>>
OneAPM挂牌新三板,续写ITOM新篇章
查看>>
终极指南:如何使用Visual Studio Code进行 Java 开发?
查看>>
通过源码解析 Node.js 中一个 HTTP 请求到响应的历程
查看>>
做了一点事,学到了一些
查看>>
CodeIgniter的密码处理论
查看>>
深入Mysql - 谈谈我对数据类型的认识
查看>>
Tsuru 1.7.0-rc4 发布,基于 Docker 的 PaaS 框架
查看>>
Apache HBase 2.1.3 发布,分布式数据库
查看>>
微信端H5开发整体解决方案
查看>>
Python之retrying
查看>>
OWASP 10 大 Web 安全问题在 JEE 体系完全失控
查看>>
洛谷 P1640 BZOJ 1854 [SCOI2010]连续攻击游戏
查看>>
如何理解Unity组件化开发模式
查看>>
util.promisify 的那些事儿
查看>>
未来黑科技公司完成亿元Pre-B轮融资,已和宝马达成合作
查看>>