日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

2022杭电多校 第三场 B题 Boss Rush

發布時間:2023/12/18 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2022杭电多校 第三场 B题 Boss Rush 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接

Boss Rush

題目大意

給了我們一個Boss的血量,然后給了我們nnn個技能,每個技能有施法時間和一個施法過程時間,會造成一個持續性傷害,題目問我們最快什么時候能干掉Boss?

題解

考慮二分答案,然后我們需要進行判定在midmidmid時間時,所能造成的最大傷害是多少,如果大于等于Boss的血量,那么返回true,否則返回false。我們計算最大傷害時,可以考慮使用狀壓DP,f[i]f[i]f[i]中的iii表示一個狀態——哪一位為1就代表使用過哪些技能。具體狀態轉移可以看代碼

代碼

#include<iostream> #include<cstring> #include<algorithm> #include<vector> #include<queue> using namespace std; #define IOS ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); #define x first #define y second #define int long long #define endl '\n' const int inf = 1e9 + 10; const int maxn = 100010, M = 2000010; const int mod = 1e9 + 7; typedef pair<int,int> PII; typedef long long LL; typedef unsigned long long ULL; typedef long double LD; int n, H; int d[20][maxn], s[20][maxn]; int t[20], len[20]; int f[maxn * 3]; bool check(int mid) {memset(f, -1, sizeof f);f[0] = 0;for(int i = 0; i < 1 << n; i ++){int time = 0;for(int j = 0; j < n; j ++){if(i >> j & 1) time += t[j];}if(time > mid) continue;for(int j = 0; j < n; j ++){if(i >> j & 1) continue;f[i | 1 << j] = max(f[i | 1 << j], f[i] + s[j][min(len[j], mid - time)]);if(f[i | 1 << j] >= H) return true;}}return false; } signed main() {IOS;int T; cin >> T;while(T --){cin >> n >> H;int l = 0, r = 0;for(int i = 0; i < n; i ++){cin >> t[i] >> len[i];r += max(t[i], len[i]);for(int j = 1; j <= len[i]; j ++) cin >> d[i][j];for(int j = 1; j <= len[i]; j ++) s[i][j] = s[i][j - 1] + d[i][j];}while(l < r){int mid = l + r >> 1;if(check(mid)) r = mid;else l = mid + 1;}if(!check(l)) cout << -1 << endl;else cout << l - 1 << endl;} return 0; }

總結

以上是生活随笔為你收集整理的2022杭电多校 第三场 B题 Boss Rush的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。