怎麼沒有題面?
我怎麼知道?
換個鏈結吧!
向洛谷勢力低頭
我們畫一下這個小螞蟻走出來的圖形,我們就會發現,是乙個類似長城的形狀
這個題,求最大值,我們應該能很容易想到用動態規劃
那麼對於乙個路徑圍成的圖形,我們需要描述的是它的位置和形狀,所以這顯然是個高維的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...