題目鏈結
n^2dp比較好想,
f[i][j]表示第i棵樹高度為j的最大收益
直接從上到下轉移即可,每次記錄下max f[1~n][j]
用於下面的轉移
f[i][j]=max(f[i][j-1],max(f[1~n][j-delta]))
max(f[1~n][j-delta])是已經求出來的,o(1)查詢
列舉j和i,總複雜度為
o(n^2)
1 #include2 #include3 #include4using
namespace
std;
5#define n 2010
6 inline int
read()
10return
x;11}12
intn,m,k,dp[n][n],m,a[n][n],maxn[n],ans;
13int
main()
1422}23
for(int i=1;i<=m;i++)
30 dp[j][i]=max(maxn[i-k],dp[j][i-1])+a[j][i];
31 maxn[i]=max(maxn[i],dp[j][i]);32}
33}34 printf("
%d\n
",maxn[m]);
35return0;
36 }
洛谷 P1107 BJWC2008 雷濤的小貓
傳送門 這道題其實是道dpdp dp題,但至於它為什麼會被分到數論,那就不得而知了.首先我們設f i j f i j f i j 為到第i ii高度在第j jj棵樹上時,我們可以摘到的最多柿子數,那麼這時我們可以得到兩個方程 a j i a j i a j i 表示第i ii棵樹的第j jj高度上有...
洛谷 P1107 BJWC2008 雷濤的小貓
給出若干棵樹,以及每棵樹不同高度有幾個柿子的資訊。以及給出走法規則,求能夠獲取到最多的柿子數。我自己的方法是 設dp i j 表示第j棵樹,高度為i時獲得的最大值。然後三重迴圈遍歷一下,第三重迴圈的含義是從之前較高的樹上找出乙個最大的值 乙個最優解 如下 dp計算 for int i h delta...
洛谷 P3197 HNOI2008 越獄
來來來,日常水一篇 滑稽 監獄有連續編號為1 n的n個房間,每個房間關押乙個犯人,有m種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄 輸入格式 輸入兩個整數m,n.1 m 10 8,1 n 10 12 輸出格式 可能越獄的狀態數,模1000...