T53865 蝴蝶的故事

2022-08-12 22:24:21 字數 1094 閱讀 8826

30pts做法:暴力or你的dp寫掛(我就dp寫掛了)

50pts做法:在dp裡面注意一點,\(2^\)可能會爆long long!那些求出來的答案明顯爆long long的直接用整個序列的和\(10^\)取min。

滿分做法:

\(\lceil log_2 \rceil = 34\),意思是第34次以及以後,不用魔法,都大於整個序列的最大和。所以後面一定要用魔法了,不用肯定不優秀。

所以設\(dp[i]\)為用了\(i\)次魔法的最短時間。這裡滾動掉了一維,所以列舉用魔法的次數要倒推列舉。

所以魔法列舉到\(33\)為止,後面的直接視為一種情況,直接在原第33次使用魔法的時間基礎上加上\(\sum_}\),這個東西可以\(o(1)\)地求出來。

所以複雜度是\(o(nlogn)\)的。。。

**:

#include#include#include#include#define ll long long

const int maxn = 100005;

const ll maxv = 1e10;

const int lim = 34;

ll a[maxn], n;

ll luog[maxn];

ll dp[maxn];

ll ans = 1e18;

ll read()

while(ch >= '0' && ch <= '9') ans = ans * 10 + ch - '0', ch = getchar();

return s * ans;

}int main()

dp[0] = 0;

for(int i = 1; i <= n; i++)

dp[0] += a[i];

ans = std::min(ans, dp[lim - 1] + luog[n] - luog[i] + (n - i) * (2 * lim + n - i - 3) / 2);

}for(int i = 0; i < lim; i++) ans = std::min(ans, dp[i]);

printf("%lld\n", ans);

return 0;

}

T139631 T3 階乘之和

給定乙個非負整數 n,請你判斷 n 是否可以由一些非負整數的階乘相加得到。有若干組資料。每行乙個整數 n,保證 n 1000000。以負數結束輸入。對於每組資料輸出一行,若可以則輸出 yes 否則輸出 no 輸入 1複製 9 1 輸出 1複製 yes7 20 校內測模擬t3 差點就離 l 開 k i...

使用t2t來編寫文件

txt2tags 示例 zh sample zh.html 看這個就能很快熟悉相關語法了 教程 zh manpage zh.html txt2tags學習 bluefrog bluefrog.wu gmail.com date m d y encoding utf 8 target html 一級標...

t073 t015 魔法物品

time limit 1 second memory limit 128 mb 有兩種型別的物品 普通物品和魔法物品。每種普通物品有乙個價值p,但每種魔法物品有兩種價值 鑑定前的價值p1和鑑定後的 價值p2 保證p2 p1 為了鑑定乙個魔法物品,你需要購買乙個鑑定卷軸。鑑定完一件魔法物品以後,鑑定卷...