openjudge 8464
這道題其實很簡單,算是dp的基礎題,比較適合開拓dp思維。
題目比較有欺騙性,其實稍微想想就可以解決,因為題意說第一次賣出後才能**,所以我們可以考慮列舉斷點,所以題目一下變得簡單,我們線性掃兩遍,算最大值就好了。
具體為:
由於不能同時進行兩次交易,所以列舉斷點,一遍掃做1到n的前n個的最大值,由於最大值一定是單調遞增的,所以每次讀入新的a[i],判斷是否有更優解就好了,同理,一遍掃n到1的後n個的最大值,做同樣的事,然後列舉斷點取最大值。
**如下:
1 #include2view codeint t,n,a[100100],f[100100],g[100100
],ans;
3int
main()
420 best=-2147483647,temp=-2147483647;21
for(int i=n;i>=1;i--)
2229
for(int i=1;i<=n;i++)
30if(f[i]+g[i]>ans)ans=f[i]+g[i];
31 printf("
%d\n
",ans);
32 ans=0;33
}34return0;
35 }
刷題列表(DP)
洛谷 p2051 ahoi2009 中國象棋 p1879 usaco06nov 玉公尺田corn fields 狀壓 p1850 換教室 概率 p2831 憤怒的小鳥 p1099 樹網的核 這應該不算dp吧 p1131 zjoi2007 時態同步 先把一顆子樹全部換成最大值,則對節點i的所有兒子v,...
學習筆記(DP) 刷題日記
貪心的思想,從右往左把每列都取完或剩下乙個 取餘2 觀察畫圖可以發現,若剩下乙個的兩列之間間隔列數為偶數的話,是可以通過最底下一行使得這兩列剩下的那乙個合併使得貢獻加1。include define ll long long define endl n using namespace std con...
PAT基礎題刷題筆記
新生初學python,但是不練習就不會熟練,於是找到了pat乙級基礎題來鍛鍊一下自己的能力,將程式設計通過的 分享出來,希望各位大神能提出寶貴意見,謝謝!卡拉茲 callatz 猜想 對任何乙個正整數 n,如果它是偶數,那麼把它砍掉一半 如果它是奇數,那麼把 3n 1 砍掉一半。這樣一直反覆砍下去,...