题目链接

bzoj3628: [JLOI2014]天天酷跑

题解

开始读错题目了,尴尬

由于题目说的跳跃次数和高度是在一开始设定的。

发现枚举一下记忆化搜索就可以过了

要注意,跳到最高点是可以不下坠继续连跳的

另外,上边界不能到达

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar(); }
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
}
const int maxn = 100007;
int n,m,c1,c2,h,freq;
#define INF 100000007
int a[23][maxn];
int f[23][maxn][6];
bool vis[23][maxn][6];
int dfs(int x,int y,int jumpcnt) {
if(y > n) return 0;
if(a[x][y] == -1) return -INF;
if(vis[x][y][jumpcnt]) return f[x][y][jumpcnt];
if(x == 1)jumpcnt = 0;
int tmp = -INF ;
if(jumpcnt < freq) {
int Sum = 0,tx = x,ty = y; bool can = true;
for(int i = 1;i < h;i ++) {
tx ++,ty ++;
if(a[tx][ty] == -1) {can = false; break; } Sum += a[tx][ty];
}
if(can) tmp = std::max(tmp,Sum + dfs(tx + 1,ty + 1,jumpcnt + 1));
}
if(x == 1) tmp = std::max(tmp, dfs(x,y + 1,0)) ;
if(x > 1) tmp = std::max(tmp, dfs(x - 1,y + 1,jumpcnt));
f[x][y][jumpcnt] = tmp + a[x][y];
vis[x][y][jumpcnt] = true;
return f[x][y][jumpcnt];
}
int ans = -INF ,an1,an2;
int main() {
n = read(),m = read(), c1 = read(),c2 = read();
for(int i = 1;i <= m;++ i) for(int j = 1;j <= n;++ j)
a[i][j] = read();
for(freq = 1;freq <= 5;++ freq)
for(h = 1;h * freq < m;++ h) {
memset(vis,0,sizeof vis);
memset(f,0,sizeof f);
int sum = dfs(1,0,m) - (h - 1) * c1 - (freq - 1) * c2;
if(sum > ans) ans = sum , an1 = h, an2 = freq;
}
if(ans > 0) printf("%d %d %d\n",ans,an2,an1);
else puts("mission failed");
return 0 ;
} #include<cstdio>
#include<cstring>
#include<algorithm>
inline int read() {
int x = 0,f = 1;
char c = getchar();
while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar(); }
while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = getchar();
return x * f;
}
const int maxn = 100007;
int n,m,c1,c2,h,freq;
#define INF 100000007
int a[23][maxn];
int f[23][maxn][6];
bool vis[23][maxn][6];
int dfs(int x,int y,int jumpcnt) {
if(y > n) return 0;
if(a[x][y] == -1) return -INF;
if(vis[x][y][jumpcnt]) return f[x][y][jumpcnt];
if(x == 1)jumpcnt = 0;
int tmp = -INF ;
if(jumpcnt < freq) {
int Sum = 0,tx = x,ty = y; bool can = true;
for(int i = 1;i < h;i ++) {
tx ++,ty ++;
if(a[tx][ty] == -1) {can = false; break; } Sum += a[tx][ty];
}
if(can) tmp = std::max(tmp,Sum + dfs(tx + 1,ty + 1,jumpcnt + 1));
}
if(x == 1) tmp = std::max(tmp, dfs(x,y + 1,0)) ;
if(x > 1) tmp = std::max(tmp, dfs(x - 1,y + 1,jumpcnt));
f[x][y][jumpcnt] = tmp + a[x][y];
vis[x][y][jumpcnt] = true;
return f[x][y][jumpcnt];
}
int ans = -INF ,an1,an2;
int main() {
n = read(),m = read(), c1 = read(),c2 = read();
for(int i = 1;i <= m;++ i) for(int j = 1;j <= n;++ j)
a[i][j] = read();
for(freq = 1;freq <= 5;++ freq)
for(h = 1;h * freq < m;++ h) {
memset(vis,0,sizeof vis);
memset(f,0,sizeof f);
int sum = dfs(1,0,m) - (h - 1) * c1 - (freq - 1) * c2;
if(sum > ans) ans = sum , an1 = h, an2 = freq;
}
if(ans > 0) printf("%d %d %d\n",ans,an2,an1);
else puts("mission failed");
return 0 ;
}

bzoj3628: [JLOI2014]天天酷跑的更多相关文章

  1. [JLOI2014]天天酷跑

    请允许我对记忆化搜索进行一个总结,我认为所有的搜索只要数据范围允许,都可以转化为记忆化搜索, 只是,用处的多与少的关系,其本身是求出设出状态之后,为求出当前状态进行递推(搜索),推到 已知状态,之后再 ...

  2. Android版xx助手之天天酷跑外挂具体分析

    Android版xx助手之天天酷跑外挂具体分析 图/文      莫灰灰 背景 近些年来,移动互联网的大肆崛起,潜移默化中影响着人们的生活和工作习惯.当腾讯的微信平台接入手机游戏之后,移动端的游戏也開 ...

  3. 程序游戏推荐(C语言贪吃蛇,python天天酷跑(需要安装pygame),js是狠人就坚持30s)

    下面是下载位置,我把他们上传到我的文件下了. C语言贪吃蛇:https://files.cnblogs.com/files/ITXiaoAng/%E8%B4%AA%E5%90%83%E8%9B%87. ...

  4. cocos2d 简单的日常高仿酷跑游戏

    1.第一个直接看看这个游戏看起来视频(GIF我们不能满足游戏展) 跑酷游戏最纠结的是地图.碰撞倒是简单,能够自己写或者使用box2d等物理引擎.跑酷游戏地图的特点就是随机性.可是随机中又有策划特意安排 ...

  5. [置顶] cocos2d-x 植物大战僵尸(13)类似酷跑的【同一角色不同动画间的切换的实现】

          有几天没和大家分享博客了,原因很简单,就是我在运行第12章所写的代码时:(开始一切正常,不过没多久就出现了内存泄露!.可能求成心切吧,当时没多加考虑就把代码发上去了.我在此对看过第12章得 ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. 站在风口,你或许就是那年薪20w+的程序猿

    最近面试了一些人,也在群上跟一些群友聊起,发现现在的互联网真是热,一些工作才两三年的期望的薪资都是十几K的起,这真是让我们这些早几年就成为程序猿的情何以堪!正所谓是站在风口上,猪也能飞起来!我在这里就 ...

  8. 相关query挖掘

    1.何为相关query 我通常也把相关query称为相似query,搜索日志中一个用户在短时间内的一系列搜索词被称为相关query.相关就是两个query间有一定的关系,反映了用户在当时的需求.本文就 ...

  9. iOS开发之如何跳到系统设置里的各种设置界面

    跳到更多设置界面 除了跳到WiFi设置界面,能不能跳到其他的设置界面呢?比如:定位服务.FaceTime.音乐等等.都是可以的,一起来看看如何实现的! 定位服务 定位服务有很多APP都有,如果用户关闭 ...

随机推荐

  1. Spark记录-Scala多线程

    Scala多线程 多线程是同时执行多个线程的过程. 它允许您独立执行多个操作.可以通过使用多线程来实现多任务.线程是轻量级的子进程,占用较少的内存.多线程用于在Scala中开发并发应用程序. Scal ...

  2. 如何修改Linux的TTL值

    原文地址:http://www.linuxidc.com/Linux/2011-11/47701.htm 网络黑客如果用ping命令去探测  一个主机,根据TTL基数可以推测操作系统的类型.对于一个没 ...

  3. java线程池的初探

    问题来源 发现学习很多技术都提到了线程池的技术,自己的线程池方面没有仔细研究过,现在看了点东西来这里总结下,最近发现写博客是一个很好的锻炼自己并且将学到的东西更加理解的一个方式. 问题探究 java的 ...

  4. CSS font系列

    font-family font-family: Verdana,Helvetica,Arial,"Microsoft YaHei",sans-serif; font-family ...

  5. Mysql导入脚本失败,提示需要SUPER权限

    1.删除: /*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */ 2.查看增删函数有没有重复 3.删除: set GLOBAL log ...

  6. 基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集【转】

    转自:http://www.cnblogs.com/surpassal/archive/2012/12/19/zed_webcam_lab1.html 一直想把USB摄像头接到Zedboard上,搭建 ...

  7. java多线程计算和

    如题:如何利用多线程实现1~1000000000的和 本文利用Callable可以返回值的特性,并将执行结果用CompletionService进行存储,最后将分步值累加. import java.u ...

  8. IntelliJ IDEA 中安装junit插件

    1.在Intellij IDEA 中安装了 Junit,TestNG插件,首先检查一下intellij IDEA 是否在安装时默认安装了这两个插件,检查方法 打开 settings -->Plu ...

  9. Kali Linux上安装SSH服务

    安装 SSH 从终端使用 apt-get 命令安装 SSH 包: # apt-get update # apt-get install ssh 启用和开始使用 SSH 为了确保安全 shell 能够使 ...

  10. CSS3实现图片木桶布局

    CSS3实现图片木桶布局 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <script> window.navigator.appVersion.inde ...