Description
Input
Output
Sample Input
5 9 8 2 1 6
Sample Output
思路:由於每兩個組成一個炸藥才能造成傷害,所以從第二個炸藥開始,在dp數組裏記錄傷害值,之後每增加一個炸藥就從這個炸藥開始向前組合,枚舉組合炸彈所需的數量,並且找到所有組合中傷害最大的情況記錄到當前dp數組中。
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <cmath>
#define INF 0x3f3f3f3f
using namespace std;
int main()
{
int n,i,j;
int a[1010];
int dp[1010];
while(scanf("%d",&n)!=EOF)
{
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int maxx,minn;
for(i=1;i<=n;i++)
{
maxx=a[i];
minn=a[i];
for(j=i-1;j>=1;j--)
{
maxx=max(maxx,a[j]);
minn=min(minn,a[j]);
if(dp[i]<dp[j-1]+(maxx-minn)*(maxx-minn))
dp[i]=dp[j-1]+(maxx-minn)*(maxx-minn);
}
}
printf("%d\n",dp[n]);
}
return 0;
}