这无疑是一个分组背包问题,斜率是分组的依据,组内物品则是这个斜率下金块的价值与重量的前缀和。

发现很多人的都是用的double储存斜率,其实我们可以用分数的方法保存,这就需要一个gcd。

然后我们用map套map维护这个分数的分子与分母,这里x,y较小,可以直接用数组来的。

另外我们还需要知道金块的先后关系,由于这个斜率已经确定了,用曼哈顿距离其实和欧几里得距离是一样的。我们这里直接用更方便的曼哈顿距离。然后我们就用set存这个斜率下的全部金块。

看代码的话我是还套个pair,first是曼哈顿距离,second是对应的v,w数组的下标(其实你也可以把\(v_i,w_i\)再用个pair套进去)。

这样我们就打了个 map套map套set套pair

然后就是简单的分组背包问题了。

话说我搞了这么多的STL,速度居然还行40ms,排前几

#include <iostream>
#include <vector>
#include <cmath>
#include <set>
#include <map>
using namespace std; int gcd(int a, int b)
{
if (b == 0)
return a;
else
return gcd(b, a % b);
} map<int, map<int, set<pair<int, int>>>> G; const int N = 4e3 + 128;
const int T = 4e4 + 128; int w[N], v[N]; vector<vector<pair<int, int>>> Task; int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n, t;
cin >> n >> t;
for (int i = 1; i <= n; i++)
{
int x, y;
cin >> x >> y;
cin >> w[i] >> v[i];
int _gcd = gcd(x, y);
G[x / _gcd][y / _gcd].insert(make_pair(abs(x) + y, i));
}
for (auto i : G)
{
for (auto j : i.second)
{
int tot_w = 0, tot_v = 0;
vector<pair<int, int>> temp;
for (auto k : j.second)
{
tot_w += w[k.second];
tot_v += v[k.second];
temp.push_back(make_pair(tot_w, tot_v));
}
Task.emplace_back(temp);
}
}
static int f[T];
int ans = 0;
for (auto i : Task)
{
for (int j = t; j >= 0; j--)
{
for (auto k : i)
{
if (j - k.first < 0)
continue;
f[j] = max(f[j], f[j - k.first] + k.second);
ans = max(ans, f[j]);
}
}
}
cout << ans << endl;
return 0;
}

[洛谷P3961,TJOI2013]黄金矿工题解的更多相关文章

  1. 洛谷3961 [TJOI2013]黄金矿工

    题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在给出你 ...

  2. 洛咕 P3961 [TJOI2013]黄金矿工

    甚至都不是树形背包= = 把每条线抠出来,这一条线就是个链的依赖关系,随便背包一下 // luogu-judger-enable-o2 #include<bits/stdc++.h> #d ...

  3. 洛谷P4304 [TJOI2013]攻击装置 题解

    题目链接: https://www.luogu.org/problemnew/show/P4304 分析: 最大独立集 最大独立集=总点数-最大匹配数 独立集:点集,图中选一堆点,这堆点两两之间没有连 ...

  4. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  5. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  6. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

  7. 02题解-洛谷 P2395 BBCode转换Markdown 题解

    洛谷 P2395 BBCode转换Markdown 题解 题目传送门: here. 一道毒瘤的大模拟,给了你一部分的 BBCode 和 Markdown 语法,叫你转换.如下表: BBCode Mar ...

  8. 洛谷10月月赛II题解

    [咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...

  9. [洛谷P1823]音乐会的等待 题解(单调栈)

    [洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...

  10. BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

随机推荐

  1. 基于Vue(提供Vue2/Vue3版本)和.Net Core前后端分离、强大、跨平台的快速开发框架

    前言 今天大姚给大家推荐一款基于Vue(提供Vue2/Vue3版本)和.Net Core前后端分离.开源免费(MIT License).强大.跨平台的快速开发框架,并且框架内置代码生成器(解决重复性工 ...

  2. 【Azure 事件中心】Event Hubs中存在非常多的错误数据,是否能提前删除这些数据呢?

    问题描述 因为一些特殊原因,Event Hub 里面堆积了很多不需要的数据事件,正常要等事件中的过期时间到后才有Event Hub自动删除掉,但希望能够尽快马上删除,有没有什么手动的方法吗? 问题解答 ...

  3. 【Azure 存储服务】使用PowerShell脚本创建存储账号(Storage Account)的共享访问签名(SASToken) : New-AzStorageContainerSASToken

    问题描述 使用PowerShell脚本如何来创建存储账号(Storage Account)的共享访问签名呢?查询到可以使用 New-AzStorageContainerSASToken 命令来生成Az ...

  4. Choreographer原理

    Android 系统在 VSYNC 信号的指引下,有条不紊地进行者每一帧的渲染.合成操作,使我们可以享受稳定帧率的画面.引入 VSYNC 之前的 Android 版本,渲染一帧相关的 Message ...

  5. 第12章_MySQL数据类型

    目录: https://www.cnblogs.com/xjwhaha/p/15844178.html 1. MySQL中的数据类型 类型 类型举例 整数类型 TINYINT.SMALLINT.MED ...

  6. sqlmap 绕过WAF

    1.基本的语法 sqlmap 更新  sqlmap -update 具体的使用方法: sqlmap -u url --current-user sqlmap -u url --current-db s ...

  7. 图片动态操作,利用SeekBar控制属性示例,适配屏幕解决方案

    需求为,让图片适配屏幕大小,并且可以用一个滑块来控制图片的旋转,用一个滑块来控制图片大小,核心语法思路,控制图片的大小, 核心语法为:mImageView.setLayoutParams(new Li ...

  8. RabbitMQ 快速复习

    目录 RabbitMQ学习笔记 1.消息队列概述 1.1 为什么学习消息队列 1.2 什么是消息中间件 1.3 消息队列应用场景 1.3.1 异步处理 1.3.2 解耦服务 1.3.3 流量削峰 1. ...

  9. 摆脱鼠标系列 - vscode 单词自动翻译 快捷键 Alt + Z

    为什么 摆脱鼠标系列 - vscode 单词自动翻译 快捷键 Alt + Z 单词函数 省得每次都查字典了 插件名称 translate speaker 翻译朗读者API 截图

  10. 记录--webpack和vite原理

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 每次用vite创建项目秒建好,前几天用vue-cli创建了一个项目,足足等了我一分钟,那为什么用 vite 比 webpack 要快 ...