[BZOJ1737][Usaco2005 jan]Naptime 午睡时间(dp)
来源:互联网 发布:电视墙控制软件 编辑:程序博客网 时间:2024/05/01 02:17
题目描述
传送门
题目大意:给出一个n个数的数列,从中选出m个数,要求选的每一段连续的区间中第一个数都没有贡献,求最大值。
题解
f(i,j,0/1/2,0/1/2)表示选了i个数,选到第j个数,第j个数不选/选了不算贡献/选了算贡献,第一个数不选/选了不算贡献/选了算贡献的最大值
目标状态只有f(m,n,0,2)是不合法的
加一个滚动数组优化
代码
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;#define N 4000int n,m,ans;int a[N],f[2][N][3][3];int Max(int a,int b,int c){ if (a<b) a=b; if (a<c) a=c; return a;}int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;++i) scanf("%d",&a[i]); memset(f,128,sizeof(f)); for (int i=1;i<=n;++i) f[0][i][0][0]=0; for (int i=1;i<=m;++i) { memset(f[i&1],128,sizeof(f[i&1])); for (int j=i;j<=n;++j) { if (i==1&&j==1) { f[i&1][j][0][0]=0; f[i&1][j][1][1]=0; f[i&1][j][2][2]=a[1]; continue; } for (int k=0;k<=2;++k) { f[i&1][j][0][k]=Max(f[i&1][j-1][0][k],f[i&1][j-1][1][k],f[i&1][j-1][2][k]); f[i&1][j][1][k]=max(f[(i-1)&1][j-1][0][k],f[(i-1)&1][j-1][1][k]); f[i&1][j][2][k]=max(f[(i-1)&1][j-1][1][k],f[(i-1)&1][j-1][2][k])+a[j]; } } } for (int i=0;i<=2;++i) for (int j=0;j<=2;++j) { if (i==0&&j==2) continue; ans=max(ans,f[m&1][n][i][j]); } printf("%d\n",ans);}
0 0
- [BZOJ1737][Usaco2005 jan]Naptime 午睡时间(dp)
- bzoj 1737: [Usaco2005 jan]Naptime 午睡时间 (DP)
- bzoj 1677: [Usaco2005 Jan]Sumsets 求和(DP)
- poj 2228 Naptime dp
- bzoj1677[Usaco2005 Jan]Sumsets 求和
- [BZOJ1677] [Usaco2005 Jan]Sumsets 求和
- 1677: [Usaco2005 Jan]Sumsets 求和
- BZOJ1677: [Usaco2005 Jan]Sumsets 求和
- 【bzoj1677】[Usaco2005 Jan]Sumsets 求和
- bzoj1677:[Usaco2005 Jan]Sumsets 求和
- TOJ 1631 Naptime -- 环形DP
- POJ 2228 Naptime 环状DP
- 【BZOJ】1677: [Usaco2005 Jan]Sumsets 求和
- BZOJ 1677:[Usaco2005 Jan]Sumsets 求和
- bzoj1677 [Usaco2005 Jan]Sumsets 求和(递推)
- POJ 2228 Naptime (DP) #by Plato
- 午睡。。。。。
- 午睡
- html&css实验8.(3)CSS.hover实现两级菜单
- 正则表达式之BRE
- SynchronousQueue
- Redis 和 I/O 多路复用
- 用RxJava实现Rxbus替换EventBus事件总线
- [BZOJ1737][Usaco2005 jan]Naptime 午睡时间(dp)
- Java流实例-文件复制
- Windows/Linux下的Python安装指导
- Failing to produce to kafka brokers java.nio.BufferUnderflowException
- java多线程并发(一)Semaphore,volatile,synchronized ,Lock, CyclicBarrier和CountDownLatch
- TensorFlow25: 使用深度学习做阅读理解+完形填空
- 图像横纵填充算法
- 使用if和goto语句构造循环
- 史上最全的Javascript面试题总结(内附答案)