Description

Input

Output

Sample Input

5
-2 0 0 1 -2
0 2 0 0 0
-4 -3 -2 -3 -7
1 0 0 0 0
0 -2 0 -2 0
0

Sample Output

8

Data Constraint

Hint

Solution

  • 看到这样分层的最优值问题,毫无疑问就是DP了。

  • 考虑把“豆豆”和“ 砖块”一起DP,方便处理。

  • 设 F[i][j][k]F[i][j][k] 表示做到前 ii 行、蛇的长度还剩下 jj 、从第 kk 列转移出去的最大得分。

  • 设 G[j][l][r]G[j][l][r] 表示蛇的长度还剩下 jj ,当前行在第 ll 列和第 rr 列来回移动仍未死亡的最大得分。

  • 显然,初始状态为:

    F[0][4][3]=0

    F[0][4][3]=0

  • 对于每一个 ii ,首先令:

    G[j][k][k]=G[j−a[i][k]][k][k]+Max(−a[i][k],0)

    G[j][k][k]=G[j-a[i][k]][k][k]+Max(-a[i][k],0)

  • 接着再往两边扩展(即从 ll 或 rr 转移过来, 注意若有隔板则不能转移):

    G[j][l][r]=Max{G[j−a[i][l]][l+1][r]+Max(−a[i][l],0),

    G[j][l][r]=Max\{G[j-a[i][l]][l+1][r]+Max(-a[i][l],0),

    G[j−a[i][r]][l][r−1]+Max(−a[i][r],0)}

    G[j-a[i][r]][l][r-1]+Max(-a[i][r],0)\}

  • 最后:

    F[i][j][k]=Max{G[j][l][r]}(1≤l≤k≤r≤5)

    F[i][j][k]=Max\{G[j][l][r]\}(1\leq l\leq k\leq r\leq5)

  • 则取最大值即可:

    ans=Max{F[i][j][k]}

    ans=Max\{F[i][j][k]\}

  • 这样的时间复杂度为 O(N∗(5∗Max{A[i][j]}∗N))O(N*(5*Max\{A[i][j]\}*N)) 。

Code

#include<cstdio>
#include<cstring>
using namespace std;
const int N=201,M=10001;
int ans,roll;
int a[N][5],b[N][5],f[2][M][5],g[M][5][5];
bool bz[N][5];
inline int read()
{int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;
}
inline int max(int x,int y)
{return x>y?x:y;
}
int main()
{int n=read(),mx=n*50;for(int i=1;i<=n;i++)for(int j=0;j<5;j++){a[i][j]=read();b[i][j]=max(-a[i][j],0);}int m=read();while(m--){int x=read(),y=read();bz[x][y-1]=true;}memset(f,128,sizeof(f));f[0][4][2]=0;for(int i=1;i<=n;i++){roll^=1;memset(f[roll],128,sizeof(f[roll]));memset(g,128,sizeof(g));for(int j=0;j<=mx;j++)for(int k=0;k<5;k++){int s=j-a[i][k];if(s>=0 && s<=mx) f[roll][j][k]=g[j][k][k]=f[roll^1][s][k]+b[i][k];}for(int k=1;k<5;k++)for(int l=0;l+k<5;l++)for(int j=0;j<=mx;j++){int r=l+k,s=j-a[i][l];if(!bz[i][l] && s>=0 && s<=mx) g[j][l][r]=g[s][l+1][r]+b[i][l];s=j-a[i][r];if(!bz[i][r-1] && s>=0 && s<=mx) g[j][l][r]=max(g[j][l][r],g[s][l][r-1]+b[i][r]);for(int p=l;p<=r;p++) f[roll][j][p]=max(f[roll][j][p],g[j][l][r]);}for(int j=0;j<=mx;j++)for(int k=0;k<5;k++) ans=max(ans,f[roll][j][k]);}printf("%d",ans);return 0;
}

JZOJ 5393. 【NOIP2017提高A组模拟10.5】Snake vs Block相关推荐

  1. JZOJ 5404. 【NOIP2017提高A组模拟10.10】Graph

    Description 给定一张n个点m条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通 你想在这张图上进行若干次旅游,每次旅游可以任选一个点x作为起点,再走到一个与x 直接有边相连的点y ...

  2. JZOJ 5401. 【NOIP2017提高A组模拟10.8】Star Way To Heaven

    Description Input Output Sample Input 10 5 2 1 1 2 3 Sample Output 1.11803399 Data Constraint Soluti ...

  3. JZOJ 5400. 【NOIP2017提高A组模拟10.7】Repulsed

    Description 小w 心里的火焰就要被熄灭了. 简便起见,假设小w 的内心是一棵n -1 条边,n 个节点的树. 现在你要在每个节点里放一些个灭火器,每个节点可以放任意多个. 接下来每个节点都 ...

  4. JZOJ 5398. 【NOIP2017提高A组模拟10.7】Adore

    Description 小w 偶然间见到了一个DAG. 这个DAG 有m 层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k 个节点. 现在小w 每次可以取反第i(1 < i &l ...

  5. JZOJ 5399. 【NOIP2017提高A组模拟10.7】Confess

    Description 小w 隐藏的心绪已经难以再隐藏下去了. 小w 有n + 1(保证n 为偶数) 个心绪,每个都包含了[1,2n] 的一个大小为n 的子集. 现在他要找到隐藏的任意两个心绪,使得他 ...

  6. JZOJ 5396. 【NOIP2017提高A组模拟10.6】Blocks

    Description Input Output Sample Input 10 5 1 7 9 9 5 9 3 4 5 8 5 7 20 9 1 Sample Output 10 6 0 2 10 ...

  7. JZOJ 5397. 【NOIP2017提高A组模拟10.6】Biology

    Description Input Output Sample Input 5 5 zzj pri prime ime owaski 2 3 1 3 5 2 2 2 3 1 actri 2 2 3 4 ...

  8. JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation

    Description Input Output Sample Input 7 2 2343223 4 1 2234 Sample Output 2243233 2334 Data Constrain ...

  9. 【JZOJ 5405】【NOIP2017提高A组模拟10.10】Permutation

    Description 你有一个长度为n 的排列P 与一个正整数K 你可以进行如下操作若干次使得排列的字典序尽量小 对于两个满足|i-j|>=K 且|Pi-Pj| = 1 的下标i 与j,交换P ...

最新文章

  1. 使用css实现背景图片无重复填充
  2. 软件工程--团队作业4
  3. zabbix安装使用及监控案例(从头到尾)
  4. flink更新flink-shaded-hadoop-3-uber
  5. SAP License:COPA计划
  6. C# LINQ 对象克隆
  7. Ubuntu18.04报错:make[1]: *** No rule to make target armv4-mont.o, needed by build-msm8916/lk. Stop.
  8. python车牌识别库_Python+Keras+TensorFlow车牌识别
  9. maya中英文对比_maya菜单中英文对照表
  10. python列表报错TypeError: list indices must be integers or slices, not str
  11. web前段设计之痛:手机浏览器和pc浏览器的width:100%的自适应问题
  12. mysql商品库存字段_mysql商品库存扣减问题总结
  13. 使用Visual Paradigm如何复制表格
  14. 当技术重构遇上DDD,如何实现业务、技术双赢?
  15. 如何快速制作一个H5单页面网站
  16. linux环境搭建篇-redis设置密码
  17. 不是封闭也不是开放 创新封闭式基金迎来变种
  18. SaaS-HRM中的认证授权
  19. Android简易实战教程--第五话《开发一键锁屏应用》
  20. 2021年起重机司机(限桥式起重机)考试题库及起重机司机(限桥式起重机)模拟考试题

热门文章

  1. Jacobi迭代法与Gauss-Seidel迭代法
  2. 系统安装操作优化:chapter4 多系统的安装与管理
  3. 使用类前置声明的好处-结合Qt 4一个主窗口实例讲解
  4. 6.6 数据集的存储与表达
  5. PIC模拟从入门到熟练系列之组会PPT20210913《Note of PIC》
  6. 科大星云诗社动态20210225
  7. 云炬随笔20211012(1)
  8. 云炬随笔20170901
  9. 机器学习大牛是如何选择回归损失函数的?
  10. python桌面快捷图标_python 创建桌面快捷方式 | 学步园