日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

刷题向》关于一道比较优秀的递推型DP(openjudge9275)(EASY+)

發布時間:2025/7/14 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 刷题向》关于一道比较优秀的递推型DP(openjudge9275)(EASY+) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  先甩出傳送門:http://noi.openjudge.cn/ch0206/9275/

  這道題比較經典,

  最好不要看題解!!!!!

  當然,如果你執意要看我也沒有辦法

  首先,顯然的我們可以用 f [ i ] 和 g [ i ] 來表示在第 i 行是公牛或母牛的情況

  那么易得遞推式:f [ i ] = f [ i - k - 1 ] + g [ i - k - 1 ] , g [ i ] = g [ i - 1 ] + f [ i - 1 ]

  于是通過 f [ n ] + g [ n ] 得到最后答案

  但實際上,我們可以將這兩種狀態合并

  加上對于k的判斷就可以得到:s [ i ] = s [ i - 1 ] +( i >k + 1 ) ? s [ i - k -1 ] : 1

  就是當 i < = k 的時候,我們只需要加上前一個的全部狀態+1,就是這個格子是母牛的狀態加上唯一的這個格子是公牛的狀態。

  而當i > k 的時候,也是考慮兩種情況,不過這一格是公牛的方案數不再是1,而是s [ i - k - 1 ],然后加上就可以掃一遍解決啦

  甩題目

描述

一年一度的展會要來臨了,農民約翰想要把N(1 <= N <= 100,000)只奶牛和公牛安排在單獨的一行中。 約翰發現最近公牛們非常好斗;假如兩只公牛在這一行中靠的太近,他們就會吵架,以至于斗毆,破壞這和諧的環境。約翰非常的足智多謀,他計算出任何兩只公牛之間至少要有K (0 <= K < N)只奶牛,這樣才能避免斗毆。 約翰希望你幫助他計算一下有多少種安排方法,可避免任何斗毆的的發生。約翰認為每頭公牛都是一樣的,每頭奶牛都是一樣的。因而,只要在一些相同的位置上有不同種類的牛,那這就算兩種不同的方法。

輸入

第一行:兩個用空格隔開的數:N和K

輸出

第一行:一個單獨的數,即約翰可以安排的方法數。考慮到這個數可能很大,你只要輸出mod 5,000,011之后的結果就可以了。

樣例輸入
4 2 輸入注釋 約翰想要一排4頭牛,但是任何兩只公牛之間至少有兩頭奶牛
樣例輸出
6
然后直接甩代碼咯
1 #include<stdio.h> 2 int n,k,s[110000]; 3 int main() 4 { 5 scanf("%d%d",&n,&k); 6 s[1]=2; 7 for(int i=2;i<=n;i++) 8 s[i]=(s[i-1]+((i>k+1)?s[i-k-1]:1))%5000011; 9 printf("%d",s[n]); 10 return 0; 11 }

?

轉載于:https://www.cnblogs.com/PencilWang/p/5991342.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的刷题向》关于一道比较优秀的递推型DP(openjudge9275)(EASY+)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。