hdu4341 Gold miner 分組揹包dp

2021-06-26 22:06:10 字數 1046 閱讀 5435

題意:和**礦工差不多。。人在(0,0)。有n種金,遊戲時間為t。告訴你每種金的位置(x,y),獲得該金需要的時間的t,以及它的

價值。且若人和多塊金子共線時,只能先取最近的金子。問在遊戲時間內可獲得最大價值。

思路:對於共線的金,我們將其分為一組,並按照距(0,0)的距離排序,那麼選該點的價值為前面所有的價值,花費的時間也是前

面所有花費的時間。對於每組我們相當於只選乙個,之後揹包跑一下,詳見**:

// file name: hdu4341.cpp //

// author: kereo //

// create time: 2023年11月08日 星期六 17時42分41秒 //

//***********************************//

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int sigma_size=26;

const int n=200+100;

const int maxn=40000+100;

const double eps=1e-8;

const int inf=0x3fffffff;

const int mod=1000000000+7;

#define l(x) (x<<1)

#define r(x) (x<<1|1)

int n,t;

int dp[maxn],res[maxn],st[maxn];

struct nodep[n];

vectorg[n];

bool judge(node a,node b)

bool cmp(int a,int b)

} printf("case %d: %d\n",++kase,dp[t]);

} return 0;

}

HDU 4341 Gold miner 分組揹包

這裡有多個點與原點的連線共線的話,那麼需要對其進行並組,將前乙個作為單獨的乙個,把前兩個作為單獨的乙個.最後直接分組揹包就可以了。如下 include include include include define maxn 205 using namespace std intn,m,cnt max...

HDU 4341 Gold miner(分組揹包)

題目鏈結 gold miner 目標是要在規定時間內獲得的價值總和要盡可能大。我們先用並查集把斜率相同的物品分在同乙個組。這些組裡的物品按照y座標的大小公升序排序。如果組內的乙個物品被選取了,那該組排在他前面的所有物品肯定被選取了。那麼我們對每個組的所有物品,對價值和代價分別求字首和。那麼選了3號,...

HDU 4341 Gold miner 分組揹包

這裡有多個點與原點的連線共線的話,那麼需要對其進行並組,將前乙個作為單獨的乙個,把前兩個作為單獨的乙個.最後直接分組揹包就可以了。如下 include include include include define maxn 205 using namespace std intn,m,cnt max...