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 為了鑑定乙個魔法物品,你需要購買乙個鑑定卷軸。鑑定完一件魔法物品以後,鑑定卷...