簡要題意:建造基地,有代價和貢獻,基地公升級貢獻要除
t 求建造的最小代價。
題目很長,變數非常多,搞得人很不舒服,但是想了想就能發現就是個揹包變形。首先可以去判斷是否可以建造出來,就是看能否對
n級基地產生貢獻,乙個小剪枝。
然後就是去做
n 輪完全揹包,記錄答案,每輪更新貢獻值。
做完全揹包的時候需要有些小變化,上界要變動,把超出的轉移到k。
**也不短,如果題意沒這麼複雜就更好了。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define fi first
#define se second
using
namespace
std;
typedef
long
long ll;
typedef pair pii;
// head
const
int m = 105;
const
int mx = 1e4+5;
const ll inf = 0x3f3f3f3f3f3f3f3f;
ll a[m];
ll b[m];
// 判斷是否能夠建造完
// 對於n級建築有乙個材料可以產生貢獻就能建造完
bool ck(int n, int m, int k, int t)
if (temp) return
true;
}return
false;
}ll dp[mx];
// 做完全揹包,注意上界應該進行變化
// 超過k的轉移到k
void completepack(int m, int k)
}}ll solve(int n, int m, int k, int t)
}return ans;
}int main()
for (int i = 0; i < m; i++)
if (!ck(n, m, k, t)) else
}return
0;}
12 7 比賽題解
這個題的意思就是對於給定的數x,找到兩個數a,b滿足以下條件 可以看出a,b是不唯一的,所以這道題是spj,那我們只要找到最好找的就好了。a b 最大的時候,就是a b x對吧,正好這時候也滿足題目中的其它要求。如果x x 都不滿足大於 x 這個條件的話,肯定就無解了,所以我們只需要判斷這個條件就好...
127 單詞接龍
思路和126差不多,區別在於只用bfs,每次訪問一層,用乙個map來儲存訪問過的結點以及與起點的距離,避免重複訪問。最後輸出map中的終點項即可 import queue class solution def ladderlength self,beginword,endword,wordlist ...
127 單詞接龍
給定兩個單詞 beginword 和 endword 和乙個字典,找到從 beginword 到 endword 的最短轉換序列的長度。轉換需遵循如下規則 每次轉換只能改變乙個字母。轉換過程中的中間單詞必須是字典中的單詞。說明 示例 1 輸入 beginword hit endword cog wo...