洛谷 P2511 HAOI2008 木棍分割

2021-08-31 01:29:14 字數 985 閱讀 8878

這題卡常,別用long long 

這題第一問好搞,直接二分答案

第二問,凡是看到求方案數並於組合數一定沒有關係的一定用 dp 解決!

然後定義狀態,顯然

轉移就是

然後我就不會優化了,看了題解,發現自己思維僵化竟然如此簡單

然後可以用字首和優化

要用滾動陣列

// luogu-judger-enable-o2

# include const int n = 100000 + 5 ;

int sum [ n ] , pre [ 2 ] [ n ] , dp [ 2 ] [ n ] , l [ n ] , ans1 , ans2 ;

int to [ n ] , n , m , now , inf = 1e9 + 7 , mod = 10007 ;

bool check ( int lim )

return cnt <= m ;

}int divx ( int l , int r )

return ans ;

}int main ( )

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

if ( sum [ i ] <= ans1 )

dp [ 0 ] [ i ] = 1 ;

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

pre [ 0 ] [ i ] = ( pre [ 0 ] [ i - 1 ] + dp [ 0 ] [ i ] ) % mod ;

now = 1 ;

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

printf ( "%d %d" , ans1 , ans2 ) ;

return 0 ;}/*

3 2 1 1

10*/

P2511 HAOI2008 木棍分割

目錄有n根木棍,第i根木棍的長度為li,n根木棍依次鏈結了一起,總共有n 1個連線處.現在允許你最多砍斷m個連線處,砍完後n根木棍被分成了很多段,要求滿足總長度最大的一段長度最小,並且輸出有多少種砍的方法使得總長度最大的一段長度最小.並將結果mod 10007。二分答案 動態規劃 include i...

P2511 HAOI2008 木棍分割

傳送門 第乙個問題直接二分答案 然後第二個問題直接在二分出的答案下跑一遍 dp 設 f i j 表示當前已經切了 i 次考慮完前 j 個位置並且強制切 j,j 1 時的方案數 那麼有轉移 f i j sum f i 1 k 發現隨著 j 增加 l 不減,所以轉移可以用字首和並動態維護左端點優化到 o...

洛谷P1450 HAOI2008 硬幣購物

硬幣購物一共有4種硬幣。面值分別為c1,c2,c3,c4。某人去商店買東西,去了tot次。每次帶di枚ci硬幣,買si的價值的東西。請問每次有多少種付款方法。輸入格式 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s 輸出格式 每次的方法數 輸入樣例 1 1 2 5 ...