标签:dp
题意是给你那个数 开始时间为1 当时间是偶数是就加上能量 否则减去,n个能量有一定的使用顺序, 中间可以有些能量不用,求最大的能量值;注意每次必须要用到一瓶药
先递推,最多使用n次,dp【i】【j】 表示第i次的最大值 则状态转移方程为;
dp【i】【0】=max(dp【i-1】【0】,dp【i-1】【1】-num【i】);
dp【i】【1】=max(dp【i-1】【1】,dp【i-1】【0】+num【i】);
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; #define INF -0x3f3f3f3f int num[150010],dp[150010][3]; int max(int a,int b) { return a>b?a:b; } int main() { int n,i,j; while(~scanf("%d",&n)) { for(i=1;i<=n;i++) scanf("%d",&num[i]); memset(dp,INF,sizeof(dp)); dp[0][0]=0; dp[0][1]=0; int Max=-1; for(i=1;i<=n;i++) { dp[i][0]=max(dp[i-1][0],dp[i-1][1]-num[i]); dp[i][1]=max(dp[i-1][1],dp[i-1][0]+num[i]); Max=max(Max,dp[i][0]); Max=max(Max,dp[i][1]); } printf("%d\n",Max); } return 0; }
标签:dp
原文地址:http://blog.csdn.net/zxf654073270/article/details/45181607