TJOI2013 黃金礦工解題報告

2021-08-28 00:23:16 字數 1432 閱讀 3361

小a最近迷上了在上課時玩《**礦工》這款遊戲。為了避免被老師發現,他必須小心翼翼,因此他總是輸。在輸掉自己所有的金幣後,他向你求助。每個**可以看做乙個點(沒有體積)。現在給出你n個**的座標,挖到它們所需要的時間以及它們的價值。有些**在同一條直線上,這時候你必須按順序挖。你可以瞬間把鉤子轉到任意角度。請你幫助小a算出在時間t內他最多可以得到多少價值的金子。

輸入格式:

第一行,兩個整數n和t,表示**的個數和總時間。接下來n行,每行四個整數x,y,t,v分別表示**的座標,挖到這個**的時間,以及這個**的價值。(0≤|x|≤200,0輸出格式:

乙個整數,表示你可以在t時間內得到的最大價值。

樣例:in                                   out    

3  10

1  1  1  1

2  2  2  2

1 3 15 9

33 10

1 1 13 1

2 2 2 2

1 3 4 7                       

7大體思路特殊的有依賴的揹包通過一些奇技淫巧轉化為分組揹包

具體實現:

先排序,把在一條線上的的**組成乙個組,然後因為必須選了前面的的才可以選後面的,所以可以將它們轉化字首和的形式,每乙個字首和就是乙個新的物品,然後分組揹包處理即可。

醜陋的 ac**:

#includeusing namespace std;

#define maxn 205

#define maxm 40005

#define eps 1e-6

int n,m;

struct node

con[maxn];

bool cmp(node a,node b)

//先按照斜率排,再按座標,可以在初始化的時候節約一些時間

int v[maxn][maxn],t[maxn][maxn],f[maxm];//v,t分別為新的物品的價值和消耗

int pack[maxn],cnt;

inline void start()//初始化

else

}}inline void dp()//分組揹包dp

}int main()

start();

dp();

printf("%d\n",f[m]);

return 0;

}//有依賴的揹包可以將價值,重量等寫成字首和的形式,然後當作分組揹包除理

希望蒟蒻的思路可以幫到各位dalao 

~~第乙個解題報告不要介意~~

leetcode 黃金礦工

你要開發一座金礦,地質勘測學家已經探明了這座金礦中的資源分布,並用大小為 m n 的網格 grid 進行了標註。每個單元格中的整數就表示這一單元格中的 數量 如果該單元格是空的,那麼就是 0。為了使收益最大化,礦工需要按以下規則來開採 每當礦工進入乙個單元,就會收集該單元格中的所有 礦工每次可以從當...

黃金礦工 回溯演算法

你要開發一座金礦,地質勘測學家已經探明了這座金礦中的資源分布,並用大小為 m n 的網格 grid 進行了標註。每個單元格中的整數就表示這一單元格中的 數量 如果該單元格是空的,那麼就是 0。為了使收益最大化,礦工需要按以下規則來開採 示例 2 輸入 grid 1,0,7 2,0,6 3,4,5 0...

力扣 黃金礦工

你要開發一座金礦,地質勘測學家已經探明了這座金礦中的資源分布,並用大小為 m n 的網格 grid 進行了標註。每個單元格中的整數就表示這一單元格中的 數量 如果該單元格是空的,那麼就是 0。為了使收益最大化,礦工需要按以下規則來開採 每當礦工進入乙個單元,就會收集該單元格中的所有 礦工每次可以從當...