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


题解

这是一道比较困难的DP,因为它分层,所以很容易想到DP,具体实现参考代码:

#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()
{freopen("snakevsblock.in","r",stdin);freopen("snakevsblock.out","w",stdout);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;//dp 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];//从(l,r]区间变成[l,r] 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;
}
/*
因为如果算i的话,只能从上面下来,所以可以用滚动数组优化空间.
*/ 
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
using namespace std;
const int maxn=210;
int a[maxn][6],b[maxn][6],bz[maxn][6];
int f[2][10010][6],g[10010][6][6];
int main(){
//  freopen("snakevsblock.in","r",stdin);
//  freopen("snakevsblock.out","w",stdout);int i,j,k,n,m,ans=0;scanf("%d",&n);int lm=n*50;for(i=1;i<=n;i++)for(j=0;j<5;j++){scanf("%d",&a[i][j]);b[i][j]=max(0,-a[i][j]);}scanf("%d",&m);for(i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);bz[x][y-1]=1;}memset(f,-128,sizeof(f));f[0][4][2]=0;int gd=0;for(i=1;i<=n;i++){gd^=1;memset(f[gd],-128,sizeof(f[gd]));memset(g,-128,sizeof(g));for(j=0;j<=lm;j++)for(k=0;k<5;k++){int sold=j-a[i][k];if(sold>=0 && sold<=lm)f[gd][j][k]=g[j][k][k]=f[gd^1][sold][k]+b[i][k];}for(k=1;k<5;k++)for(int l=0;l+k<5;l++)for(j=0;j<=lm;j++){int r=l+k,sold=j-a[i][l];if(!bz[i][l] && sold>=0 && sold<=lm)g[j][l][r]=g[sold][l+1][r]+b[i][l];sold=j-a[i][r];if(!bz[i][r-1] && sold>=0 && sold<=lm)g[j][l][r]=max(g[j][l][r],g[sold][l][r-1]+b[i][r]);for(int p=l;p<=r;p++)f[gd][j][p]=max(f[gd][j][p],g[j][l][r]);}for(j=0;j<=lm;j++)for(k=0;k<5;k++)ans=max(ans,f[gd][j][k]);}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/cjgjh/p/9360401.html

「CJOJ2573」Snake vs Block相关推荐

  1. 千亿参数大模型时代,QQ浏览器团队十亿级小模型「摩天」登顶CLUE

    机器之心专栏 作者:Joshua 今年以来,中文 NLP 圈陆续出现了百亿.千亿甚至万亿参数的预训练语言模型,炼大模型再次延续了「暴力美学」.但 QQ 浏览器搜索团队选择构建十亿级别参数量的「小」模型 ...

  2. 「AutoML」强化学习如何用于自动模型设计(NAS)与优化?

    作者&编辑 | 言有三 一直以来,网络结构的设计是一个非常需要经验且具有挑战性的工作,研究人员从设计功能更加强大和更加高效的模型两个方向进行研究,随着各类经典网络设计思想的完善,如今要手工设计 ...

  3. 谷歌大脑发布神经网络的「核磁共振」,并公开相关代码

    作者:杨晓凡.camel.思颖.杨文 神经网络的可解释性一直是所有研究人员心头的一团乌云.传统的尝试进行可解释性研究的方法是通过查看网络中哪个神经元被激发来来理解,但是即使我们知道「第 538 号神经 ...

  4. 正确的「记事本」打开方式:能渲染3D图像,还能玩贪吃蛇

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 渲染3D图像,一个「记事本」就够了. 最近,GitHub上一名叫"Kyle Halladay"的小哥,便上传了这样一个项 ...

  5. matlab的开方算法_正确的「记事本」打开方式:能渲染3D图像,还能玩贪吃蛇

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 渲染3D图像,一个「记事本」就够了. 最近,GitHub上一名叫"Kyle Halladay"的小哥,便上传了这样一个项 ...

  6. 小米抢购限流峰值系统「大秒」架构解密2

    上文介绍了[年度案例]小米抢购限流峰值系统架构历年演进历程 ,本文主要介绍最新版「大秒」系统架构. 整合的抢购限流峰值系统--「大秒」 2014年初,公司决定举办一场"米粉节"活动 ...

  7. Cube 技术解读 | 详解「支付宝」全新的卡片技术栈

    简介:魔方卡片(Cube),让 App 首页实现敏捷更新. CodeHub#7 正式落幕,来自蚂蚁集团的技术专家「京君」与掘金社区的开发者们分享了「支付宝」全新的卡片技术栈--魔方卡片(Cube). ...

  8. 一文教你玩转链上「动森」My Neighbor Alice

    NFT最近火到什么程度?已有观点表示,「放眼皆是泡沫」. Uniswap一双袜子卖16万美元,推特创始人五个单词拍出250万美元,加密艺术家Beeple在佳士得的NFT拍卖作品获得975万美元出价-- ...

  9. CSS基础「七」精灵图 \ 字体图标 \ 三角 \ 用户界面样式 \ 页面初始化

    本篇文章为 CSS 基础系列笔记第七篇,参考 黑马程序员pink老师前端入门教程 其他CSS基础相关文章: CSS基础「一」基础选择器 / 字体属性 / 文本属性 / 三种样式表 CSS基础「二」复合 ...

最新文章

  1. ACMNO.5给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上为A 80-89分为B 70-79分为C 60-69分为D 60分以下为E
  2. go语言任意代码执行漏洞 cve-2018-6574
  3. vts传感器采取船舶的_【火炬高企】船舶通讯导航设备专家新诺航科
  4. hantomjs能解析出html源码吗,网页源码是js js跳转后才是源码 怎么用易语言写 不使用超文本 有延时...
  5. 韩顺平 jdbc 之 mysql,(韩顺平讲解)jdbc学习(四)---java连接mysql
  6. 详解Java的交互式编程环境:jshell
  7. 微信手机端调试抓包总结与问卷星手机端的自动化
  8. Kibana:为 table 创建链接 drilldown - 7.11 版本
  9. html5怎么给视频加字幕,2018版本的pr如何给视频加字幕?
  10. 为何我的孩子不沉迷网络游戏
  11. 使用JS获取当前地理位置方法汇总
  12. 微信小程序 + 腾讯位置服务获取全国城市列表
  13. hosts文件位置在哪里_hosts文件怎么修复
  14. VSCode自定义网络背景皮肤
  15. ubuntu 20.04 安装 微信最新方式
  16. 函数曲线长度的计算方法
  17. 026 三角函数求导公式推导
  18. 惠普暗影精灵4P拆机换风扇
  19. 嵌入式OCR+RFID识别电子护照阅读器模块MRZ码电子证件识别模组的应用与攻略
  20. 华为软开面经(许愿OC)

热门文章

  1. Linux下调用fork或system启动子进程的信号和资源释放相关问题
  2. 模块目录下site.php,使用apache配置为每个站点指定PHP包含目录
  3. TCP/IP的初步理解,TCP和UDP的区别
  4. 程序员:像机器一样思考
  5. 译林 五年级上 单词_牛津译林版九年级英语上Unit1单元重点单词、词组和句型总结...
  6. 在Ubuntu 14.04平台上利用Intel的GPU实现硬件加速--基于VAAPI
  7. 深度学习入门:Day-11_CNN
  8. contes 7.6安装后网络问题解决方案
  9. python怎么编写流氓软件_PBot很多程序员都知道吧?深度分析一款基于python的恶意软件!...
  10. 【kafka】kafka Kafka分区leader迁移