我寫的想法是每乙個dp【i】都是前dp【i】的最大值
dp【i】就等於前所有dp【0。。。i-1】的最大值加上dp【i】
最大值是乙個中間變數
最大值得選取條件就是序列的值大小都是遞增的,也就是a[i]>a[前面的]
#include#include#includeusing namespace std;
typedef long long ll;
ll a[1000+100];
ll dp[1100];
int main()
printf("%lld\n",maxx);
}return 0;
}
看了別人的**,也就是把我寫的x中間變數變成了b[i]
求dp【i】的時候b【i】是沒用的,可以用來存中間值
就省了點**,原理是一樣的
#include#include#includeusing namespace std;
int a[1100],b[1100];
int main()
}printf("%d\n",maxx);
}return 0;
}
HDU1087(最長上公升子串行DP)
解題思路 i j 時 dp i max dp j a i a i 記錄儲存最大的dp i 值即可。dp i 代表從1到 i 的最大上公升子串行的和,裡層迴圈為dp i 做更新,尋找1到 i 區間內的最大上公升子串行和,從而使得其具有區域性最優子結構。完整 include include includ...
HDU 1087 求最長遞增子串行的和 DP
題意 這個樣例很誤導人啊,這個題意呢,就是從起點跳到終點,保持遞增跳而且得分最大。注意,起點和終點是不計分的 解析 模板改一下就好了,之前求的是序列長度。這裡求和,那麼只要把dp初始化a 依然還是 每個數選還是不選的問題。轉移方程 if a i a j dp i max dp i dp j a i ...
最大連續序列值(hdu 1087)
題意 輸入乙個長度為n的序列,該序列不一定從小到大排列,但是我們經過的路徑必須從小到大,如果後面的數大於前面的數則終止路徑,最後輸出最大的連續序列值。分析 這是dp的乙個基礎題,我們首先要用value陣列儲存乙個序列,然後用dp陣列儲存目前為止最大的連續序列值,且dp陣列和最終最大值均初始化為序列第...