dp[ i ][ 0 ] : 第i个位置不取

dp[ i ][ 1 ] : 第i个位置取

这样就可以得到状态转移方程:

dp[i][0]=max(max(dp[i][0],dp[i-1][1]),dp[i-1][0]);//这位置不选则前面位置可选可不选
dp[i][1]=max(dp[i][1],dp[i-1][0]+a[i]); 这位置选则前面位置必不选

然鹅要保证1和n不能相邻嘛,所以就跑两边。一遍不选1,n可选可不选,一遍选1,n必不选。这三个情况取max。
 #include <bits/stdc++.h>
using namespace std;
#define maxn 50050
int dp[maxn][],a[maxn];
int main(){
ios::sync_with_stdio();
cin.tie(); cout.tie();
int n; cin>>n;
for(int i=;i<n;i++) cin>>a[i];
//不选第一个
dp[][]=,dp[][]=a[];
for(int i=;i<n;i++){
dp[i][]=max(max(dp[i][],dp[i-][]),dp[i-][]);
dp[i][]=max(dp[i][],dp[i-][]+a[i]);
}
int ans=max(dp[n-][],dp[n-][]);
//选第一个,第二个一定不选
memset(dp,,sizeof(dp));
dp[][]=dp[][]=a[];
for(int i=;i<n;i++){
dp[i][]=max(max(dp[i][],dp[i-][]),dp[i-][]);
dp[i][]=max(dp[i][],dp[i-][]+a[i]);
}
ans=max(ans,dp[n-][]);
cout<<ans<<endl;
return ;
}

最新文章

  1. POJ1837 Balance[分组背包]
  2. 安卓开发_浅谈SubMenu(子菜单)
  3. html页面元素加载顺序
  4. ASP.NET 分页控件
  5. DML 数据操控语言
  6. CSS背景与列表
  7. UITableViewCell 高度计算从混沌初始到天地交泰
  8. iOS应用开发:什么是ARC?
  9. 普林斯顿大学算法课 Algorithm Part I Week 3 快速排序 Quicksort
  10. iptables 简单配置
  11. Java并发编程:如何创建进程?
  12. 【python密码学编程】6.凯撒加密法
  13. Linux指令--more,less
  14. Android_scaleType属性
  15. nginx配置文件详细解读
  16. max (Largest elements in array)
  17. springbank 开发日志 阅读spring mvc的源代码真是受益良多
  18. python模拟艺龙网登录requests包
  19. STL之stack容器
  20. js异步计时器

热门文章

  1. 微信小程序在sublime开发代码高亮显示
  2. code和pre竟然有区别!!!!
  3. codeforces round 472(DIV2)D Riverside Curio题解(思维题)
  4. 洛谷P4891 序列 || 膜法阵,魔法阵
  5. 【密码学】SHA1算法实现及详解
  6. phpcms Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE错误
  7. 《C#高效编程》读书笔记11-理解短小方法的优势
  8. JFrame 文本打印
  9. 金三银四面试季节之Java 核心面试技术点 - JVM 小结
  10. spring-boot整合shiro作权限认证