只要理解题目意思就不难做,有n种药,每个药都有一个值x,每次进行选择,当是第奇数个药是+x,第偶数个药时-x,可以跳过一些药
只需要用一个二维状态的数组dp[i][j];
dp[i][0],表示偶数次选择前i种药的最大值,
dp[i][1],表示奇数次选择前i种的的最大值,
显然
dp[i][0]=max(dp[i-1][0],dp[i-1][1]-x);
dp[i][1]=max(dp[i-1][1],dp[i-1][0]+x);
#include"stdio.h"
#include"string.h"
#define N 150001
#define MAX(x,y) x>y?x:y
int dp[N][2];
int main()
{
int n;
int i;
int x;
while(scanf("%d",&n)!=-1)
{
dp[0][1]=dp[0][0]=0;
for(i=1;i<=n;i++)
{
scanf("%d",&x);
dp[i][0]=MAX(dp[i-1][0],dp[i-1][1]-x);
dp[i][1]=MAX(dp[i-1][1],dp[i-1][0]+x);
}
printf("%d\n",MAX(dp[n][0],dp[n][1]));
}
return 0;
}