DP 動態規劃入門 一維陣列

墳前向日葵發表於2019-07-16

一個一維陣列,取一個數後不能取其相鄰的數,取a0就不能取a1,取a1不能取a0和a2,求能取最大數之和。

輸入:
5(陣列長度)
[4,7,9,3,1]
輸出: 14

思路:順應題目int一個相同長度的陣列s[n],s[n]對應a[0]到a[n]的最大數之和(不取相鄰數)。類似數學裡的數列。

然後一個數判斷一次,從第一個判斷到最後一個就可以了。

程式碼規範如下

#include<bits/stdc++.h>
using namespace std;
#define maxn 100010
int n,a[maxn],dp[maxn];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i],dp[i]=0;
	dp[1]=a[1];
	for(int i=2;i<=n;i++) dp[i]=max(dp[i-2]+a[i],dp[i-1]);
	cout<<max(dp[n-1],dp[n])<<endl;
	return 0;
}

在這裡插入圖片描述

相關文章