考查點:動態規劃
思路:題目的意思實質是要從乙個包含n個整數的集合中選取兩個不相交的子集,在選取的所有方案中,找出兩個子集和的最大值。為此,可以對輸入陣列進行兩個方向的掃瞄。在正向掃瞄時,進行一次0(n)的dp,用dp1[i]表示前i個數中連續和的最大值,反相掃瞄類似。最後從k=0到k=n-2進行遍歷,找出max(dp1[k]+dp2[k+1])。
提交情況:一開始是ac,但是由於使用new,記憶體使用太多,改掉了new,wa。原因是k的取值範圍問題。
收穫:使用new雖然記憶體使用更精確,但是由於存在多組測試資料,反而會使得記憶體使用率大幅上公升,一定程度上影響時間。學習了如何在有負數的陣列中,求最大連續和。
參考方案:
code:
#include
using
namespace std;
int a[50001],dp1[50001],dp2[50001];
int main()
dp1[i]=maxsum;
if(sum<0)
sum=0;
}
sum=0;
maxsum=-int_max;
for(int i=n-1;i>=0;i--)
dp2[i]=maxsum;
if(sum<0)
sum=0;
}
int result=-int_max;
for(int i=0;i
cout<}
return 0;
}
7 18 DP考試解題報告
今天的考試真的是天崩地裂,寫了的三個題全炸。然而誰叫我弱 不注意細節呢?真的要扇耳光。t1 題意 一段區間的高度為這個區間中高度的最小值,給定n個寬度,求每個寬度的期望高度 40 算出長度為x的區間的所有的最小值的取值的和,除以總的方案數 n x 1 用st表預處理可以n 2 記得開long lon...
整數劃分解題報告(DP方法)
1.問題描述 給定乙個正整數n和k 1.將n劃分成若干正整數之和的劃分數。2.將n劃分成k個正整數之和的劃分數。3.將n劃分成最大數不超過k的劃分數。4.將n劃分成若干奇正整數之和的劃分數。5.將n劃分成若干不同整數之和的劃分數。2.問題分類 總的來說這些都是揹包問題 第乙個問 就是乙個完全揹包,揹...
HDU 3652 數字DP 解題報告
b number problem description a wqb number,or b number for short,is a non negative integer whose decimal form contains the sub string 13 and can be div...