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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【动态规划】爱与愁的心痛

發布時間:2025/3/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【动态规划】爱与愁的心痛 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原題傳送門

思路


本題難度本為入門難度,因為他的數據很小,用O(n2)的暴力算法就可以AC,但是,作為一個對于認為自己水題過多而感到羞愧的OIer,我決定用O(n)的算法來做這道題.

我不打算用前綴和(其實就是不會),用前綴和也可以做出O(n)的時間復雜度,但是很復雜,而且常數因子還比我接下來要介紹的算法的常數因子大,所以,我自認為我的這個算法是洛谷全站最好的(我翻了題解).

思想:貪心&動態規劃

復雜度:時間復雜度O(n);空間復雜度O(n);

如果a[n]<a[m+1],那么a[n]~a[m]區間的和一定小于a[n+1]~a[m+1]區間的和.
而a[n+1]~a[m+1]區間的和減a[n]~a[m]區間的和就等于a[m+1]-a[n].
則用dp[m+1]表示a[m+1]-a[n],那么a[n+2]~a[m+2]區間的和減a[n]~a[m]區間的和就等于a[m+1]-a[n]+a[m+2]-a[n+1]也就是b[m+1]+a[m+2]-a[n+1].而他的值又可以用dp[m+2]表示
所以得到dp[m+1]到dp[m+2]的]狀態轉移方程為:dp[m+2]=dp[m+1]+a[m+2]-a[n+1].
所以dp[m+i-1]到dp[m+i]的狀態轉移方程為dp[i+m]=dp[i+m-1]+a[i+m]-a[i]

另外,若a[1]~a[m]就是最小的范圍或者n=m,則程序會出現錯誤,需要特判:

if(dp[no]>0||n==m)//特判no=m;

剩下的就很簡單了,直接上代碼.

Code


#include <iostream> #include <queue> using namespace std;long long n,m,gkmin=99999999,ans,no;//我就是喜歡把gkmin設的大一點,你咬我啊 long long a[3002]; long long dp[3002];int main() {cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n-m;i++){dp[i+m]=dp[i+m-1]+a[i+m]-a[i];//狀態轉移if(gkmin>dp[i+m])gkmin=dp[i+m],no=i+m;}if(dp[no]>0||n==m)//特判no=m;for(int i=no;i>no-m;i--)ans+=a[i];cout<<ans;return 0; }

后記

為了裝逼敲一個高性能代碼,我足足提交了20次左右,才AC.好吧,我承認是我自己在折磨我自己QAQ.
另外,此算法仍存在改進空間,可以用遞歸的迭代法代替動態規劃的龐大dp數組,從而將空間復雜度降為O(1),但因為我懶,所以有興趣的可以自行改進.

轉載于:https://www.cnblogs.com/gongdakai/p/11031577.html

總結

以上是生活随笔為你收集整理的【动态规划】爱与愁的心痛的全部內容,希望文章能夠幫你解決所遇到的問題。

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