\(dp\)被暴切了,真開心<-睿智\(xxs\)
本題有\(\mathcal o(n+m),\mathcal o(nm),\mathcal o(n^2m)\)的做法,當然我一眼只能切出\(\mathcal o(nm)\)的做法,不過\(\mathcal o(n+m)\)應該也是可做的。
看到題目很多限制,不禁慌亂,不過自己寫一寫很快發現滿足:
\[a_1\leqslant a_2\leqslant ......\leqslant a_n\leqslant b_n\leqslant b_\leqslant b_1
\]然後用\(dp\)來動態更新組合數即可,大概是這樣的:
我們設\(dp[i][j]\)為第\(i\)小位置上結尾數(及最大數)為\(j\)的組合種數,那麼:
\[dp[i][j]=\sum\limits_^jdp[i-1][k]
\]這樣就是\(\mathcal o(n^2m)\)的做法,不過容易發現\(dp[i][j]=dp[i][j-1]+dp[i-1][j]\)(我們這裡把\(dp[i][0]\)初始化為\(0\)),這樣就能做到\(\mathcal o(nm)\)了。
#include#include#includeusing namespace std;
#define mod 1000000007
int n,m;
int dp[25][1005];
int ans=0;
int main()
for(int i=1;i<=n;i++) ans=(ans+dp[m][i])%mod;
printf("%d\n",ans%mod);
return 0;
}
解題報告 CF58C
cf 上 1800 的題。可以用桶來計數,設 b i 為第乙個數為 i 時合法的數的個數,顯然這個是可以 mathcal o 1 直接算的,然後就做完了。一些我犯的 sb 錯誤 1.正整數序列沒看到正。2.注意 b 的非一值不一定只到 n 要迴圈到到 1e5 然後做得我懵逼至極,總體上說這道題還是比...
CF328解題報告
a題 iq test 很水的題,就是給出數列的前四項,判斷出是等比還是等差。求下一項。code include using namespace std int main else cout 42 endl return 0 b題 sheldon and ice pieces 題意 有一排卡片,每張卡...
0712CF解題報告
a.free cash 題目大意,輸入第一行輸入n,然後輸入n行,每行輸入兩個數h 和 m 要求把出現次數最多的h和m的次數輸出。思路 此題運用雜湊法,先令乙個數tmp h 100 m 然後建立乙個陣列vis 2505 因為h 24 m 60 所以tmp 2505 最後用vis tmp 來統計次數,...