暴搜優化.
分析:
令第 i 種裝備的數量為sum[i],顯然如果 sum[i]不為 0 那麼這種裝備必選一件,在這時需要考慮的總方案數為 ∏
max(sum[i], 1),其中 ∑sum[i] ≤ 50。最壞情況下所有
sum 的值都相同,令它們都等於 k,則方案數為 kn/k ,當 k 取 3 時取到最大值 3n/3 ,在 n = 50 時
並不算太大,因此可以直接爆搜所有方案得到最優解。
需要注意的是,sum[i] = 0 的部分應該直接跳過,以保證搜尋樹上每一層的節點數至少是上一層的兩倍,使得時間複雜度為 o(3n/3 ),否則會退化成 o(n*3n/3) 而 tle。
#include .h>
#define ll long long
#define t int t;
scanf
("%d"
,&t)
;while
(t--
)using namespace std;
int dx=
;int dy=
;const ll mod =
1e9+7;
const int maxn =
2e5+5;
ll ans =0;
int n,m;
int f[55]
[55][
5];int nxt[55]
;int sum[55]
;void
dfs(int k, int a, int b, int c, int d)
int num = sum[k]
;//如果當前種裝備數量為0,直接搜下一種數量不為0的裝備種類
if(num ==0)
for(int i =
1; i <= num; i ++)}
int main()
k = m +1;
//核心**,記錄下一種數量不為0的裝備是哪種
for(int i = m; i >
0; i --
) ans =0;
dfs(1,
100,
100,
100,
100)
;printf
("%lld\n"
, ans);}
return0;
}
差點搞不懂快排
include include include include include using namespace std const int num 25 這裡預設使用的pivot是a left partition將 a分成兩部分,左邊的部分小於pivot,右邊的部分大於pivot 兩種partiti...
UDPClient 的奇特現象,實在搞不懂
我有個專案,設計了乙個udp服務端。是通過udpclient 的乙個例項 同一埠 提供收發服務。當專案上線測試後,奇怪的現象發生。如果重啟過伺服器的話,伺服器可以執行一段較長時間無異常。但一段時間之後,奇怪的事情來了。1 例如之前有a b c等n個客戶端已經連線到服務端,服務端一直持續為它們 提供服...
搞不懂C語言 指標的意義
以下是c 中的指標用法,c語言的指標除了可以隨意讀取記憶體之外,不知道有啥好處,我把指標比喻成陣列下表。而記憶體就如一條超級大的陣列。我真的越來越 搞不懂指標的意義,處了可以越界有啥好處了。mystruct struct new mystruct mystruct refmystruct ref s...