學習第九天

2021-08-21 15:38:25 字數 1439 閱讀 7965

怎麼沒有題面?

我怎麼知道?

換個鏈結吧!

向洛谷勢力低頭

我們畫一下這個小螞蟻走出來的圖形,我們就會發現,是乙個類似長城的形狀

這個題,求最大值,我們應該能很容易想到用動態規劃

那麼對於乙個路徑圍成的圖形,我們需要描述的是它的位置和形狀,所以這顯然是個高維的dp

位置很好描述,但是形狀太複雜了,我們怎麼去描述啊?

我們怎麼知道它每個凸起的部分多高,怎麼知道每個凹下去的地方又有多低?

似乎無法描述

所以我們應該轉換思路

在這麼乙個形狀裡,是乙個個高高低低的矩形,那麼我們是否可以去描述它們呢?

我們先設定乙個陣列f[i][j][p][h],表示以(i,j)為左下角的第p個高為h的矩形的最大值,這裡第p個是目標圖形裡的第p個。

但是我們試寫一下轉移方程,就會發現根本沒法寫。

那麼我們還缺了什麼?

我們還缺了乙個是陣列g[i][j][p][h][v]

這個陣列多了乙個v

v為0時,表示大於h時的最大值

v為1時,表示小於h時的最大值

所以我們的轉移方程就出來了:

f[j][p][h]=max(f[j-1][p][h],g[j-1][p-1][h][p%2])+s[i][j]-s[i-h][j];

其中s陣列是乙個縱向的字首和,自己看看**就明白了

求完f後,我們還要更新g:

g[j][p][h][0]=max(g[j][p][h+1][0],f[j][p][h+1]);

g[j][p][h][1]=max(g[j][p][h-1][1],f[j][p][h-1]);

再用g和f去更新ans即可

**如下:

#include

#include

#include

using

namespace

std;

int n,m,k;

int xx;

int f[120][25][120];

int g[120][25][120][2];

int s[120][120];

int main()

}for(int i=1;i<=k;i++)

}int ans=0xc0c0c0c0;

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

g[j][p][i][0]=0xc0c0c0c0;

for(int h=i-1;h>0;h--)

g[j][p][1][1]=0xc0c0c0c0;

for(int h=2;h<=i;h++)

}ans=max(ans,max(f[j][k][i],g[j][k][i][1]));}}

printf("%d",ans);

return

0;}

python學習 第九天

在下這廂有禮了 爬蟲簡單實現 coding utf 8 import urllib def gethtml url page urllib.urlopen url html page.read returnhtml html gethtml print html l urllib 模組提供了讀取we...

第九天學習日誌

學習日誌 蘇嵌專案實訓 姓名 梁軒齊 日期 2018.7.12 今日學習任務 行列式鍵盤輸入及led顯示 今日任務完成情況 基本完成,但除錯不出來 今日中發現問題彙總 寫 很吃力,基本框架可以寫出,但是,除錯不出來。今日未解決問題 除錯不出 今日開發收穫 學會了程式設計過程中的一些思路,可以進行一些...

HCIA 學習第九天

acl配置 基本acl 因為只能識別源ip,所以為了避免誤刪,呼叫時盡量靠近要求中的目標 r2 acl integer 2000 2999 basic access list add to current using rules integer 3000 3999 advanced access l...