当前位置: 首页 > news >正文

[loj6039]「雅礼集训 2017 Day5」珠宝 dp+决策单调性+分治

https://loj.ac/problem/6039

 

我们设dp[i][j]表示考虑所有价值小于等于i的物品,带了j块钱的最大吸引力。

对于ci相同的物品,我们一定是从大到小选k个物品,又发现最大的k个的价值在k变大的时候增长率是单调减的。

同时对于同样的ci,被转移和转移到的状态mod ci同余。

这些dp值也具有单调性,因此这个dp具有决策单调性。

我们用分治优化转移。负责度O(c*k*logk)

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<algorithm>
 7 #include<vector>
 8 #define maxn 305
 9 #define maxk 50005
10 #define ll long long
11 using namespace std;
12 inline int read() {
13     int x=0,f=1;char ch=getchar();
14     for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
15     for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
16     return x*f;
17 }
18 ll n,k,sz[maxn],pre=0,now=1;
19 ll dp[2][maxk],g[2][maxk];
20 vector<ll> q[maxn];
21 bool cmp(ll a,ll b) {return a>b;}
22 void solve(int l,int r,int ql,int qr,int x,int SZ) {
23     if(l>r||ql>qr) return;
24     int mid=ql+qr>>1,minmid=-1;ll val=0;
25     for(int i=max(l,mid-SZ);i<mid&&i<=r;i++) {
26         if(minmid==-1||g[0][i]+q[x][mid-i-1]>val) {
27             val=g[0][i]+q[x][mid-i-1];minmid=i;
28         }
29     }
30     g[1][mid]=val;
31 //    if(minmid==-1) minmid=l;
32     solve(l,minmid,ql,mid-1,x,SZ);solve(minmid,r,mid+1,qr,x,SZ);
33 }
34 int main() {
35     n=read(),k=read();
36     for(int i=1;i<=n;i++) {
37         int x=read(),y=read();
38         q[x].push_back(y);sz[x]++;
39     }
40     for(int i=1;i<=300;i++) {
41         if(!sz[i]) continue;
42         sort(q[i].begin(),q[i].end(),cmp);
43         for(int j=1;j<sz[i];j++) q[i][j]+=q[i][j-1];
44         for(int j=0;j<i;j++) {
45             int p=j,bk=0;
46             for(;p<=k;p+=i,bk++) g[0][bk]=dp[pre][p];
47             solve(0,bk-1,0,bk-1,i,sz[i]);
48             p=j,bk=0;
49             for(;p<=k;p+=i,bk++) dp[now][p]=max(g[0][bk],g[1][bk]);
50         }
51         swap(now,pre);
52     }
53     for(int i=1;i<=k;i++) printf("%lld ",dp[pre][i]);
54 }
View Code

 

转载于:https://www.cnblogs.com/wls001/p/10184957.html

相关文章:

  • OGL(教程29)——3D拾取
  • spring IoC---注解配置方式的依赖注入
  • sicp ex-2.57 多项式求导
  • 从存储库中删除敏感数据(删除文件历史)
  • OGL(教程33)——实例渲染
  • Min_25筛学习笔记
  • OGL(教程34)——一个特效库
  • OGL(教程35)——延迟渲染1
  • Spring源码分析 之浅谈设计模式
  • OGL(教程36)——延迟渲染2
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • OGL(教程37)——延迟渲染3
  • ImageMagic的配置
  • assimp编译及使用(1)
  • unity中使用fmod音频插件3
  • android图片蒙层
  • create-react-app做的留言板
  • Debian下无root权限使用Python访问Oracle
  • IP路由与转发
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Netty源码解析1-Buffer
  • spring security oauth2 password授权模式
  • springboot_database项目介绍
  • Twitter赢在开放,三年创造奇迹
  • 编写高质量JavaScript代码之并发
  • - 概述 - 《设计模式(极简c++版)》
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 【干货分享】dos命令大全
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​如何防止网络攻击?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # .NET Framework中使用命名管道进行进程间通信
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (39)STM32——FLASH闪存
  • (function(){})()的分步解析
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm高校实验室 毕业设计 800008
  • .NET 5种线程安全集合
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net和php怎么连接,php和apache之间如何连接
  • .NET是什么
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @ComponentScan比较
  • @JsonFormat与@DateTimeFormat注解的使用
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务