hdu2713(dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2713
题意:有N个点,每个点都有一个值x,每次进行跳跃,当跳到自己所跳的第奇数个点是+x,第偶数个点时-x。
分析:这题dp状态转移方程不难想,dp[i][0]表示偶次数跳到第i个点是达到的最大值,dp[i][1]表示奇次数跳到第i个点达到的最大值。
则有:
dp[0][i]=max(dp[0][i-1],dp[1][i-1]-x)
dp[1][i]=max(dp[0][i-1]+x,dp[1][i-1])
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> #include <queue> #include <cstdlib> #include <stack> #include <vector> #include <set> #include <map> #define LL long long #define mod 1000000007 #define inf 0x3f3f3f3f #define N 150010 #define clr(a) (memset(a,0,sizeof(a))) using namespace std; int dp[2][N]; int main() { int n,x; while(scanf("%d",&n)>0) { memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { scanf("%d",&x); dp[0][i]=max(dp[1][i-1]-x,dp[0][i-1]); dp[1][i]=max(dp[1][i-1],dp[0][i-1]+x); } printf("%d\n",max(dp[0][n],dp[1][n])); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步