題意:和**礦工差不多。。人在(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...