好多句話題解

2022-04-07 20:39:56 字數 2404 閱讀 7446

咕咕咕了好久終於編出來了

首先看成在座標系上面走。

假設當前在 \((x,y)\),強制 \(x\ge y\),要走到 \((a,b)\),每一次可以進行下面幾種操作。

走到 \((x+1,y)\)

如果 \(x>y+1\),那麼可以走到 \((x,y+1)\)

走到 \((x,x)\)

不難發現 \(1\) 操作一定會進行 \(a\) 次,只需要在操作序列上面插入 \(2,3\) 操作即可。

那就列舉 \(2\) 操作的次數 \(i\) 進行計數。

發現 \(3\) 操作可以看成當前的點不動,平移當前終點在的直線和終點,形成乙個新的限制。

由於我語文不是很好,所以畫了乙個圖,大家可以簡單看看。

大概說的就是把黑線和 \(t\) 移動至綠線和 \(t'\),並把原路線跟著做乙個變換。

觀察移動直線的性質:

移動後 \(t'=(a',b')\) 滿足 \(a'=a,(a'-b')-(x-y)=a-b\),解出來就是 \((a,b-(x-y))\)

在之後的行動中進行操作 \(2\) 時,必須滿足不走到平移後的線。

每次直線的截距減小。

假設沒有進行 \(3\) 操作,那可以直接算方案數。

假設進行了至少一次 \(3\) 操作,那對於每一條路徑,最後一定移到 \((a,i)\),且如果時間倒流,可以依次移到 \((a,i),(a,i+1)...(a,b)\),於是可以插板法算插入方案數,這題就做完了。

code:

inline int cal(int n, int m) 

int main()

} cout << res;

return 0;

}

有容量為 \(m\) 的揹包和 \(n\) 種物品,每種物品的體積為 \(v_i\),價值為 \(b_i\),求體積限制內最大價值。

\(n\le10^6,m\le10^9,a_i,b_i\le100\)。

考慮轉化成兩個較小的子問題,假設是 \(x\) 和 \(m-x\) 以內的完全揹包問題,那麼顯然會有 \(x\le m-x,(m-x)-x\le \max\\)。

於是只需求體積限制 \(limv\in [\frac2,\frac2]\) 內的完全揹包問題。

這個繼續按照邊界拆成兩個較小的,每拆一次區間的端點值都減了一半左右,且顯然區間長度最後是不會超過 \(2*\max\\) 的。

這樣拆下去,最後只需要做乙個小範圍(大概是 \(\max\*3\) 這個範圍內)的完全揹包,然後倒著往上推就行了。

然後由於 \(a_i,b_i\) 範圍都是 \(100\),所以 \(n\) 是個假的,離散化一下即可。

code:

const int n = 305;

ll ori[n], f[55][n];

int n, m, v = 0, l[55], r[55], sig = 0, tot = 0;

pii a[n * n];

int main()

sort(a + 1, a + sig + 1), sig = unique(a + 1, a + sig + 1) - a - 1;

int s1 = m, s2 = m;

while (s1 > 0) l[++tot] = s1, r[tot] = s2, s1 = (s1 - v) / 2, s2 = (s2 + v) / 2;

for (ri i = 1; i <= sig; ++i) for (ri j = a[i].fi; j <= v * 3; ++j) ckmax(ori[j], ori[j - a[i].fi] + a[i].se);

for (ri i = tot; i; --i)

} cout << "max=" << f[1][0];

return 0;

}

直接 \(dp\) 實在優化不動,考慮容斥。

設 \(f(x)=\frac1,f_0(x)=\sum\limits_f_i^mx^i\)

然後答案顯然是 \(\frac\)

然後設這個數列遞推可以表示成 \(f_i=c_1\alpha^i+c_2\beta^i\)

於是把 \(f_i^m\) 給二項式展開,每個部分是乙個多項式求逆,加起來是乙個上下都有 \(o(\text)\) 的分式,乘一下發現很線性遞推。

於是分治 \(ntt\) + 線性遞推即可。

code

咕咕咕咕咕咕咕咕咕咕咕咕咕。

一句話題解

由於有些題是在是不想寫就開個坑吧 老年選手的悲哀 題目鏈結 顯然所有f n,k 都是2 x,不如取對數變成加法 那麼我們有f n 0 i 1 42f n i,0 if n,0 sum f n i,0 i f n,0 i 142 f n i,0 i,這是乙個線性遞推 並且f n k f n 1,k f...

noip2012 2018一句話題解

歷年noip普及 提高的一句話題解,大致是記錄思路,也會寫一寫心路歷程啥的 2012 普及組t1 簽到題,看了一眼發現我居然錯過兩次,注意一下給出的數字已經是兩個質數乘積,所以搜尋出其中乙個滿足的便可以結束,我是從小往大搜,除一下求出另乙個大的便可 t2 模擬,比較水的一道模擬,直接按照輸入模擬,注...

話題焦點人物題解

20 話題焦點人物題解 描述微博提供了一種便捷的交流平台。一條微博中,可以提及其它使用者。例如lee發出一條微博為 期末考試順利 kim neo 則lee提及了kim和neo兩位使用者。我們收集了n 1 n 10000 條微博,並已將其中的使用者名稱提取出來,用小於等於100的正整數表示。通過分析這...