[TJOI2013]黄金矿工解题报告
题目描述
小A最近迷上了在上课时玩《黄金矿工》这款游戏。为了避免被老师发现,他必须小心翼翼,因此他总是输。在输掉自己所有的金币后,他向你求助。每个黄金可以看做一个点(没有体积)。现在给出你N个黄金的坐标,挖到它们所需要的时间以及它们的价值。有些黄金在同一条直线上,这时候你必须按顺序挖。你可以瞬间把钩子转到任意角度。请你帮助小A算出在时间T内他最多可以得到多少价值的金子。
输入输出格式
输入格式:
第一行,两个整数N和T,表示黄金的个数和总时间。接下来N行,每行四个整数x,y,t,v分别表示黄金的坐标,挖到这个黄金的时间,以及这个黄金的价值。(0≤|x|≤200,0<y≤200,0<t≤200,0≤v≤200)
输出格式:
一个整数,表示你可以在T时间内得到的最大价值。
样例:
In out
3 10 1 1 1 1 2 2 2 2 1 3 15 9 |
3 |
3 10 1 1 13 1 2 2 2 2 1 3 4 7 |
7 |
大体思路:特殊的有依赖的背包通过一些奇技淫巧转化为分组背包
具体实现:
先排序,把在一条线上的的黄金组成一个组,然后因为必须选了前面的的才可以选后面的,所以可以将它们转化前缀和的形式,每一个前缀和就是一个新的物品,然后分组背包处理即可。
丑陋的 AC代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 205
#define maxm 40005
#define eps 1e-6int n,m;
struct node
{int x,y,t,v;double K;//k为斜率
}con[maxn];bool cmp(node a,node b)
{if(abs(a.K-b.K) < eps)return a.x < b.x;return a.K < b.K;
}//先按照斜率排,再按坐标,可以在初始化的时候节约一些时间int v[maxn][maxn],t[maxn][maxn],f[maxm];//v,t分别为新的物品的价值和消耗
int pack[maxn],cnt;inline void start()//初始化
{sort(con+1,con+1+n,cmp);for(int i=1;i<=n;i++){if(abs(con[i].K-con[i-1].K) > eps||i==1)++cnt;if(pack[cnt]==0){v[cnt][++pack[cnt]]=con[i].v;t[cnt][pack[cnt]]=con[i].t;}else{++pack[cnt];v[cnt][pack[cnt]]=con[i].v+v[cnt][pack[cnt]-1];t[cnt][pack[cnt]]=con[i].t+t[cnt][pack[cnt]-1];}}
}inline void dp()//分组背包dp
{for(int i=1;i<=cnt;i++)for(int j=m;j>=t[i][1];j--){int now=f[j];for(int k=1;k<=pack[i];k++)if(j>=t[i][k])now=max(now,f[j-t[i][k]]+v[i][k]);f[j]=max(f[j],now);}
}int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d%d%d%d",&con[i].x,&con[i].y,&con[i].t,&con[i].v);con[i].K=(double)con[i].y/con[i].x;}start();dp();printf("%d\n",f[m]);return 0;
}
//有依赖的背包可以将价值,重量等写成前缀和的形式,然后当作分组背包除理
希望蒟蒻的思路可以帮到各位dalao
~~第一个解题报告不要介意~~
[TJOI2013]黄金矿工解题报告相关推荐
- 洛谷P3961 [TJOI2013]黄金矿工—C++
题目 题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在 ...
- [TJOI2013]黄金矿工
题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在给出你 ...
- 洛谷3961 [TJOI2013]黄金矿工
题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在给出你 ...
- TJOI2013 黄金矿工(01背包改)
题目描述 小A最近迷上了在上课时玩<黄金矿工>这款游戏.为了避免被老师发现,他必须小心翼翼,因此他总是输.在输掉自己所有的金币后,他向你求助.每个黄金可以看做一个点(没有体积).现在给出你 ...
- 洛咕 P3961 [TJOI2013]黄金矿工
甚至都不是树形背包= = 把每条线抠出来,这一条线就是个链的依赖关系,随便背包一下 // luogu-judger-enable-o2 #include<bits/stdc++.h> #d ...
- 黄金矿工问题【动态规化】
文章目录 黄金矿工 解题思路 递归实现 二维数组实现 一维数组实现 黄金矿工 很久很久以前,有一位国王拥有5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人人数也不同.例如有的金矿储量是500kg黄 ...
- 2016-11-17试题解题报告
2016-11-17试题解题报告 By shenben 水灾(sliker.cpp/c/pas) 1000MS 64MB 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知 ...
- LeetCode:1219.黄金矿工(Java语言)
不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 1219.黄金矿工 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 ...
- 久久未至的Codevs1024一塔湖图解题报告
一直想给这个题写个解题报告但是给忘了OTZ难产了这么久终于出来了 这个题当时坑了我一个星期整,所以一定要写一个解题报告纪念一下 1024 一塔湖图 时间限制: 1 s 空间限制: 128000 KB ...
最新文章
- 环境变量、用户变量、系统变量
- python pptx 从中间加几页_python-pptx---插入表格
- [转]NYOJ-511-移动小球
- python gps模块_一步一步使用uPyCraft学习MicroPython之GPS记录器
- TIOBE 6月编程语言排行榜:Python势不可挡
- matlab在运筹学,MATLAB在运筹学(单纯形法)教学中的应用
- Linux 命令(15)—— umask 命令(builtin)
- 如何向普通人解释机器学习、数据挖掘
- zookeeper启动失败解决方法
- Spring Security入门教程
- 开机黑屏、自检不通过,主板检测卡代码为25问题解决
- 【python爬虫】爬取链家二手房数据
- 丰巢取快递系统(二)
- DirectX函数总结2
- 2022世界人工智能大会全记录
- 去爱一个无缘无故责备你的人,你就学到了生命的艺术。
- excel中统计每一行中指定字体颜色和填充颜色的单元格求和(不使用VBA)
- 逻辑归纳与数学归纳:皮亚诺公理5解读1——皮亚诺读后之七
- 如何读取PHD实时数据
- 密度聚类:OPTICS算法详解