思路:

 dp[i][0] 代表取的时候左边没有

dp[i][1] 代表取的时候右边没有

dp[i][2] 代表取的时候左右都没有

dp[i][3] 代表取的时候左右都有

然后自己转移吧= =、

注意两个区间端点:

 如果旁边有取a[i], 如果没有取b[i]。
 只有一个的时候取a[i]。。。。
太狗了,这题意!
#include<bits/stdc++.h>
using namespace std;
typedef __int64 LL;
const int INF=0x3f3f3f3f; int dp[3005][4];
int a[3005];
int b[3005];
int c[3005]; void DP(int n)
{
if(n==1)
{
printf("%d\n",a[1]);
return;
}
memset ( dp , -0x3f , sizeof ( dp ) );
dp[1][0]=a[1];
dp[1][2]=b[1];
dp[1][1]=-INF;
dp[1][3]=-INF; for(int i=2;i<n;i++)
{
dp[i][0]=max(dp[i-1][0]+b[i],dp[i-1][3]+b[i]);
dp[i][1]=max(dp[i-1][1]+b[i],dp[i-1][2]+b[i]);
dp[i][2]=max(dp[i-1][0]+c[i],dp[i-1][3]+c[i]);
dp[i][3]=max(dp[i-1][1]+a[i],dp[i-1][2]+a[i]);
} dp[n][1]=max(dp[n-1][1]+a[n],dp[n-1][2]+a[n]);
dp[n][2]=max(dp[n-1][0]+b[n],dp[n-1][3]+b[n]); printf("%d\n",max(dp[n][1],dp[n][2]));
} void solve()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
scanf("%d",&b[i]);
for(int i=1;i<=n;i++)
scanf("%d",&c[i]); DP(n);
} int main()
{
solve();
return 0;
}
/*
4
1 2 3 4
4 3 2 1
0 1 1 0
*/

最新文章

  1. php 迭代器使用
  2. 【转】PowerShell入门(十二):编写PowerShell管理单元和二进制模块
  3. 系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
  4. GCD之dispatch queue深入浅出
  5. iOS多线程的初步研究(三)-- NSRunLoop
  6. c/c++字符串处理大集合
  7. php抓取页面的几种方法详解
  8. 读写UTF-8、Unicode文件(加上了文件头,貌似挺好用)
  9. BZOJ3016: [Usaco2012 Nov]Clumsy Cows
  10. seajs + easyui [转]
  11. 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)
  12. cefsharp实现javascript回调C#方法
  13. Augular JS里的各种ng
  14. 使用FileReader实现前端图片预览
  15. 201521123039 《java程序设计》第三周学习总结
  16. windows下使用curl命令 &amp;&amp; 常用curl命令
  17. Fiddler抓包【5】_Fiddler过滤
  18. jQuery 短信验证码倒计时
  19. LuoGu P1004 方格取数
  20. 广商博客冲刺第三天new

热门文章

  1. PHP对称加密类
  2. 怎么实现单击span时给span添加边框
  3. java中两字符串比较--compareTo方法
  4. SOAP Only Authentication Using C#
  5. Go语言string,int,int64 ,float之间类型转换方法
  6. undefined reference to &#39;__android_log_print&#39;解决方案
  7. 一个测试基础面试题——如何测试web银行开户
  8. &quot;未预编译文件 因此不能请求该文件&quot;问题处理
  9. hdu-5726 GCD(rmq)
  10. Python之Numpy详细教程