P3961 [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时间内得到的最大价值。

输入输出样例

输入样例#1:

3 10
1 1 1 1
2 2 2 2
1 3 15 9

输出样例#1:

3

输入样例#2:

3 10
1 1 13 1
2 2 2 2
1 3 4 7

输出样例#2:

7

说明

30%的数据,0 < T ≤ 4000

100%的数据,N ≤ 200, 0 < T ≤ 40000

分组背包 , 一条直线上的在一个组里,

每个点的数值变成这条直线上的前缀和(一组只能选一个)  (要排序)。

#include<bits/stdc++.h>
#define MAXN 256
#define MAXT 40005
using namespace std;
int x[MAXN],y[MAXN],t[MAXN],v[MAXN],N,T,cnt,st[MAXN],sv[MAXN],f[MAXN][MAXT],ans;
map <int,int> Map;
vector <int> p[MAXN];
void Sort(int l,int r){
    int i=l,j=r,mid=x[(l+r)>>1];
    do{
        while (x[i]<mid) ++i;
        while (x[j]>mid) --j;
        if(i<=j){
            swap(x[i],x[j]);swap(y[i],y[j]);
            swap(t[i],t[j]);swap(v[i],v[j]);
            ++i;--j;
        }
    }
    while (i<=j);
    if(l<j)Sort(l,j);
    if(i<r)Sort(i,r);
}
int main()
{
    scanf("%d%d",&N,&T);
    for(int i=1;i<=N;i++)
        scanf("%d%d%d%d",&x[i],&y[i],&t[i],&v[i]);
    Sort(1,N);
    for(int i=1;i<=N;i++){
        int k=y[i]/x[i],tmp;
        if(!Map[k])Map[k]=(tmp=++cnt);
        else tmp=Map[k];
        p[tmp].push_back(i);
        st[tmp]+=t[i],sv[tmp]+=v[i];
        t[i]=st[tmp],v[i]=sv[tmp];

    }
    for(int i=1;i<=cnt;i++){
        for(int j=0;j<=T;j++)f[i][j]=f[i-1][j];
        for(int j=T;j>=0;j--){
            for(int k=0;k<p[i].size();k++){
                if(j>=t[p[i][k]])
                    f[i][j]=max(f[i][j],f[i-1][j-t[p[i][k]]]+v[p[i][k]]);
            }
        }
    }
    printf("%d\n",f[cnt][T]);
    return 0;
}
时间: 2025-01-17 11:38:54

P3961 [TJOI2013]黄金矿工的相关文章

[Tyvj Aug11] 黄金矿工

传送门 Description 黄金矿工是一个经典的小游戏,它可以锻炼人的反应能力.该游戏中,可以通过"挖矿"获得积分并不断升级.玩家可以在线玩flash版黄金矿工,也可以下载后玩单机版黄金矿工.目前,黄金矿工小游戏有多个版本,例如黄金矿工双人版,黄金矿工单人版等. Jimmy是一位黄金矿工,他所在的金矿是一个n*n的矩形区域(俯视),区域内有黄金.石头和TNT,由一个 n*n的矩阵描述.黄金的价值对应矩阵中的正值,石头的价值对应矩阵中的负值,TNT由0表示.换句话说,挖到黄金赚钱,石

HTML5游戏实战之160代码实现黄金矿工

黄金矿工是一款在flash时代红极一时的游戏,变种非常多,今天介绍它的html5版本制作过程. 这是一款结合了商业元素的游戏,在游戏的某些页面上有企业的品牌露出,这也是html5游戏盈利的一种方式,您可以根据需要替换成需要的品牌. 首先show一下最终成果,PC玩家点这里 手机玩家扫描二维码: 如果您需要在本游戏的基础上加以改进点这里. 在开始介绍游戏开发步骤前,先打个广告,对html5游戏开发,TangIDE 或者Cantk 感兴趣的朋友请扫描下方二维码,加入七巧板官方QQ交流群,一起交流做h

【游戏推荐】黄金矿工--OGEngine精品游戏推荐系列【二】

"黄金矿工Ⅲ之神秘宝藏"是使用OGEngine开发的休闲类游戏,是黄金矿工系列的经典再现!无穷的宝藏等待你的挖掘.做好准备了吗?这里是无穷的金矿,闪耀的钻石迷惑你的双眼,更有百媚的购物小姐令你垂涎,她将提供丰富的工具,有助于你在限定时间内抓取到更多的宝藏,增加了"矿山"."草原"."沙漠"."海洋"."极地"五个场景,让你百玩不厌! 下载链接请猛戳>> http://m.wi

[leetcode 周赛 157] 1219 黄金矿工

1219 Path with Maximum Gold 黄金矿工 问题描述 你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为 m * n 的网格 grid 进行了标注.每个单元格中的整数就表示这一单元格中的黄金数量:如果该单元格是空的,那么就是 0. 为了使收益最大化,矿工需要按以下规则来开采黄金: 每当矿工进入一个单元,就会收集该单元格中的所有黄金. 矿工每次可以从当前位置向上下左右四个方向走. 每个单元格只能被开采(进入)一次. 不得开采(进入)黄金数目为 0 的单元

黄金矿工重制版_给自己的新年礼物_2017

PCx64_绿色压缩包  http://pan.baidu.com/s/1qXWqXha 提取码:(ikev) PCx86_绿色压缩包  http://pan.baidu.com/s/1jIz9wAM 提取码:(geda) Android_绿色压缩包  http://pan.baidu.com/s/1geRj9gn  提取码:(1kp6) 说明:工具,角色随意选择,上面三个滑动条代表三原色(R,G,B),第四是工具选择,第五是角色选择,拖拽即可! 碰色模式得分排序由大到小 红 青 绿 紫 红x4

黄金矿工还可通过规划的风格和人员呵呵

http://music.show160.com/628632http://music.show160.com/628595http://music.show160.com/628520http://music.show160.com/628548http://music.show160.com/628431http://music.show160.com/628486http://music.show160.com/628350http://music.show160.com/628394ht

黄金矿工迷你版

很有街机范儿的一款小游戏,茶余饭后的不二之选 作者:不找事儿 视频演示地址:搜狐视频 下载地址1:百度网盘 下载地址2:360云盘 提取码:0e88 说明:此为练习版,角色,钩子,颜色,场景匀随意选择,游戏目的只有一个,那就是超越自己的最高分,无极限. 操作:鼠标操作,只有仍炸弹的时候用到键盘Q键或空格键.

【游戏体验】黄金矿工

>>>点此处可试玩无敌版<<< 这款游戏非常经典,算是老古董了 个人测评 游戏性 8/10 音乐 7/10 剧情 4/10 总评 19/30 原文地址:https://www.cnblogs.com/fBuX/p/12317059.html

HDU4341-Gold miner-分组DP

模拟黄金矿工这个游戏,给出每一个金子的位置和所需时间,计算在给定时间内最大收益. 刚看这道题以为金子的位置没什么用,直接DP就行,WA了一发终于明白如果金子和人共线的话只能按顺序抓. 这就是需要考虑先后关系问题.看了背包⑨讲之后以为是“有依赖关系的背包”,感觉解决方案很不明显,想不出来做法. 后来想到,可以把共线的金子按1,1+2,1+2+3...变成若干个,然后共线的金子组成一组. 显然这个问题就变成了在组内互斥的情况下的分组DP,背包⑨讲已经给出了伪代码. 预处理的时候使用了优先队列,map