【初步分析】:這題是一道加了約束條件的01揹包問題,約束條件是同一條直線上的**必須要按順序挖。
【twice分析】: 約束條件就是假如有c1、c2、c3三個同一直線上的**,假設c1先給出**,下面再對**給出解釋。
#include#define mem(a,b) memset(a,b,sizeof a)
using namespace std;
typedef long long ll;
struct bone
;bone res[300];
int n,m,x,y;
int memo[300][40000+100];
int cmp(bone n1,bone n2)
}else
for(int j=m;j>=0;j--)
}printf("%d\n",memo[n][m]);
}return 0;
}
用乙個mk[i]記錄分組序號,假設1、2、3、4、5、6、7、8、9,假設5、6、7是同一直線,那麼我們就記成1、2、3、4、5、5、5、6、7.
下面的狀態轉移方程我們[mk[i]-1]就和[i-1]相等,等於就是把5、5和6、5和6和7綁在一起,這幾個物品一起做乙個取捨。這樣就變成了01揹包了。
leetcode 黃金礦工
你要開發一座金礦,地質勘測學家已經探明了這座金礦中的資源分布,並用大小為 m n 的網格 grid 進行了標註。每個單元格中的整數就表示這一單元格中的 數量 如果該單元格是空的,那麼就是 0。為了使收益最大化,礦工需要按以下規則來開採 每當礦工進入乙個單元,就會收集該單元格中的所有 礦工每次可以從當...
zcmu 黃金礦工 (分組揹包)
30 的資料,0 t 4000 100 的資料,n 200,0 t 40000 對於同一條直線上的金子,必須把前面的拿走才能拿後面的。舉個例子,有 1,2,3,三塊金子,有拿1,拿 1 2,拿1 2 3三種拿法,同時他們之間是互斥的,三種拿法中只能取一種拿法。這樣就變成了分組揹包問題。變成分組揹包問...
黃金礦工 回溯演算法
你要開發一座金礦,地質勘測學家已經探明了這座金礦中的資源分布,並用大小為 m n 的網格 grid 進行了標註。每個單元格中的整數就表示這一單元格中的 數量 如果該單元格是空的,那麼就是 0。為了使收益最大化,礦工需要按以下規則來開採 示例 2 輸入 grid 1,0,7 2,0,6 3,4,5 0...