[poj 3034] Whac-a-Mole  dp

从数字电源项目出发:我的dsPIC33开发环境搭建实战与MCC快速配置初体验 本文详细介绍了基于Microchip dsPIC33系列的数字电源开发环境搭建与MCC快速配置实战经验。从MPLAB X IDE和XC16编译器的版本选择到PWM模块的电源专用配置,提供了针对数字电源开发的优化建议和常见问题解决方案,帮助工程师高效完成LLC谐振转换器等项目的开发。 阅读详情

Whac-a-Mole
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 3623 Accepted: 1071

Description

While visiting a traveling fun fair you suddenly have an urge to break the high score in the Whac-a-Mole game. The goal of the Whac-a-Mole game is to… well… whack moles. With a hammer. To make the job easier you have first consulted the fortune teller and now you know the exact appearance patterns of the moles.

The moles appear out of holes occupying the n2 integer points (x, y) satisfying 0 ≤ x, y < n in a two-dimensional coordinate system. At each time step, some moles will appear and then disappear again before the next time step. After the moles appear but before they disappear, you are able to move your hammer in a straight line to any position (x2, y2) that is at distance at most d from your current position (x1, y1). For simplicity, we assume that you can only move your hammer to a point having integer coordinates. A mole is whacked if the center of the hole it appears out of is located on the line between (x1, y1) and (x2, y2) (including the two endpoints). Every mole whacked earns you a point. When the game starts, before the first time step, you are able to place your hammer anywhere you see fit.

Input

The input consists of several test cases. Each test case starts with a line containing three integers n, d and m, where n and d are as described above, and m is the total number of moles that will appear (1 ≤ n ≤ 20, 1 ≤ d ≤ 5, and 1 ≤ m ≤ 1000). Then follow m lines, each containing three integers x, y and t giving the position and time of the appearance of a mole (0 ≤ x, y < n and 1 ≤ t ≤ 10). No two moles will appear at the same place at the same time.

The input is ended with a test case where n = d = m = 0. This case should not be processed.

Output

For each test case output a single line containing a single integer, the maximum possible score achievable.

Sample Input

4 2 6
0 0 1
3 1 3
0 1 2
0 2 2
1 0 2
2 0 2
5 4 3
0 0 1
1 2 1
2 4 1
0 0 0

Sample Output

4
2

Source
Nordic 2006

题目链接:http://poj.org/problem?id=3034

题意:打地鼠游戏,n*n的矩阵,每一个整数点(x,y)都有一个鼠洞,某个老鼠在某个鼠洞出现的时间只有一秒。游戏者拿着锤子,锤子可以在任意一个整数点上(不一定在矩阵内)。游戏者每一秒可以将锤子从当前位置直线移动到下一位置(整数点)。两位置之间的距离不超过d。移动的直线路径穿过的(过整数点中心的)鼠洞如果有老鼠,都会被打晕。例如(0,0)移动到(0,3)。如果(0,1),(0,2)有老鼠出现就会被打晕。打晕一只老鼠得一分,求最大分数。

思路:dp[i][j][k]状态代表在第i时刻,到(j,k)点最大获利;参考了一下网上代码:http://www.w2bc.com/article/115472

代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int dp[12][31][31];
int vis[12][31][31];
int mt;
int tmp[31][31];
int ans;
int maxn;
int n,m,d;
int dix[4]={1,1,-1,-1};
int diy[4]={1,-1,1,-1};
void cal(int t,int x,int y)
{           
    int xx,yy;
        for(int i = 0; i <= d; ++i)
        for(int j = 0; j <= d; ++j)
        {
            if(!i && !j)
            {
                dp[t][x][y] += vis[t][x][y];
                tmp[x][y] = dp[t][x][y];
                dp[t+1][x][y] = max(dp[t+1][x][y],dp[t][x][y]);
                continue;
            }
            if(i*i+j*j > d*d) continue;
            for(int k = 0; k < 4; ++k)
            {               
                xx = x+i*dix[k];
                yy = y+j*diy[k];
                if(xx < 0 || xx >= n || yy < 0 || yy >= n) continue;
                int g = __gcd(abs(xx-x),abs(yy-y));
                tmp[xx][yy] = tmp[xx+(x-xx)/g][yy+(y-yy)/g]+vis[t][xx][yy];
                dp[t+1][xx][yy] =  max(dp[t+1][xx][yy],tmp[xx][yy]);
            }
        }

}
int main()
{
    while(scanf("%d%d%d",&n,&d,&m))
    {
        mt=0;
        ans=0;
        if(!n&&!d&&!m) return 0;
        n+=10;
        memset(dp,0,sizeof(dp));
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=m;i++)
        {
            int aa,bb,tt;
            scanf("%d%d%d",&aa,&bb,&tt);
            vis[tt][aa+5][bb+5]=1;
            mt=max(tt,mt);
        }
        for(int k=1;k<=mt;k++)
        for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
            cal(k,i,j);
        }   
        for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
        ans = max(ans,dp[mt][i][j]);        
        printf("%d\n",ans);
    }

}
记一次Nacos线程数飙升排查 Nacos线程飙升问题排查 阅读详情

相关推荐

ENVI与Sarscape协同处理哨兵一号数据的完整流程解析

本文详细解析了利用ENVI与Sarscape软件协同处理哨兵一号(Sentinel-1)SAR数据的完整工作流程。从环境搭建、数据导入与裁剪,到核心的DEM辅助多时相配准、斑点噪声滤波,再到最终的地理编码与辐射定标,提供了标准化的操作指南与实用技巧,帮助用户高效地将原始雷达数据转化为可用于分析的地理编码产品。

weixin_29251131的博客 339

思路好 poj3034解题报告 还有trick

<br />这道题就是大老鼠的意思<br /> 题意:每次就是你可以在按照任意直线移动至多d的距离,<br /> 然后每次有一定的老鼠,下一次移动开始是上次的结束的位置,求在t的时间内打最多的老鼠是怎么样的。<br /><br /> 开始的时候一直没有思路,后来是做了poj 1054 的时候了解到少华分析的dp的方向性的时候学会了这种简化题目的方法,其实这也算是一种暴力dp的暴力。<br /><br /> 这道题有一个trik 就是锤子移动到坐标可能是负数这一点是很不一样的也是很难发现的,因为题目确

mindmb的专栏 828

QCC5125/QCC5144----LDAC 44.1K 48K 96K 192K 输出

QCC5125/QCC5144----LDAC 44.1K 48K 96K 192K 输出。而且还不需要license限制。

Alex_886的博客 1971

poj 3034 Whac-a-Mole

http://poj.org/problem?id=3034 题意:打地鼠游戏中,你有一个锤子,每一秒钟你可以拿着锤子移动d个单位的距离,掠过的鼠洞中露出的地鼠都会被锤打至,而事先知道从开始时各时间段内出现在老鼠的数量和位置,问题是从游戏开始至结束时,你最多能打到多少只地鼠,开始时锤子可以在任何位置。 1 #include <cstdio> 2 #include &l...

weixin_30847271的博客 128

Day470&471.Netty概述&Netty高性能架构设计 -netty

Netty概述 一、原生 NIO 存在的问题 NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。 开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。 JDK NIO

阿昌爱Java 1570

Rockchip开发板FUSB302快充调试避坑指南:从设备树配置到驱动修改全流程

本文详细解析了在Rockchip开发板上调试FUSB302快充功能的全流程,重点涵盖设备树配置、驱动修改及硬件设计避坑指南。针对PD协议协商失败、电流倒灌等常见问题,提供了从软件配置到硬件排查的实战解决方案,帮助嵌入式工程师高效完成快充功能开发。

weixin_28256233的博客 114

POJ-3034 Whac-a-Mole DP (trick很坑爹)

  题目链接:http://poj.org/problem?id=3034   此题的状态方程很容易想出来,以时间为阶段划分,然后地图为状态,f[k][i][j]=Max{ f[k-1][x][y]+t | t=sum( map[k][p][q] && (p,q)在线段(i,j)-(x,y)上 }。   转移的时候用点小技巧就可以了,就是先把通方向上的单位整数向量求出来,在更新...

weixin_30636089的博客 112

Ubuntu20.04下SRS流媒体服务器的安装与开机自启动优化指南

本文详细介绍了在Ubuntu20.04系统下安装SRS流媒体服务器并优化开机自启动的完整指南。从基础环境准备、服务管理方案对比到systemd自启动深度优化,提供了实用的配置技巧和排查方法,帮助用户快速搭建稳定的流媒体服务环境。特别推荐使用systemd方案实现高效的自启动管理。

weixin_29313239的博客 410

poj 3034 动态规划

思路:这是一道坑爹的动态规划,思路很容易想到,就是细节。 用dp[t][i][j],表示在第t时间,锤子停在(i,j)位置能获得的最大数量。那么只要找到一个点转移到(i,j)收益最大即可。 #include<map> #include<set> #include<cmath> #include<queue> #include<c...

weixin_30655219的博客 151

通过采用下面方法检查内容,还是系统无法更新下载,但是错误代码变成了——下载错误 - 0x80004002-到底如何解决?必须重装系统吗?-这个到底是系统问题,还是硬件问题?

‌。

qq_15963745的博客 335

总目录- AutoSAR从入门到精通实战系列课程【持续更新中...】

欢迎大家订阅《AutoSAR入门和实战系列》,开始前博主先列出AutoSAR学习的大纲,同时这也可以作为大家学习AutoSAR的参考。想学习和及以及的同学们,可以订阅本博客,本博客一直持续更新中。如果想深入或从本质上学习和理解AutoSAR,打开此链接后,,点击左下方【立即订阅】订阅专栏!!!】......

4万+

【POJ 3034】 Whac-a-Mole(DP)

【POJ 3034】 Whac-a-Mole(DP) Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3621   Accepted: 1070 Description While visiting a traveling fun fair you sudd

ACMer' 1985

一文掌握DrissionPage的详细使用

是一个基于 Python 的网页自动化工具,主要用于网页数据的抓取、自动化操作和测试。它结合了 Selenium 和 Requests 的优点,提供了更简洁、高效的 API,适用于各种网页自动化任务。DrissionPage 是一个功能强大且易于使用的网页自动化工具,适用于各种网页自动化任务。希望本文的 DrissionPage 的基本使用方法和一些高级功能能够帮助到你。

数据知道的博客 1万+

POJ-3034-Whac-a-Mole-基础dp

POJ-3034-Whac-a-Mole-基础dp POJ-3034-Whac-a-Mole-基础dp Description Input Output Examples Input Output Problem Description Solution Code Description While visiting a traveling fun fair yo...

Simon的博客,已转移至 https://www.cnblogs.com/--Simon/ 652

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

poj 3034 Whac-a-Mole(dp)

题目:http://poj.org/problem?id=3034

mousehao 757

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

POJ 3034 Whac-a-Mole DP

题意:在一个n*n的矩阵中,每个(x,y)坐标有个洞,在任意时刻(从上一时刻开始到目前时刻结束),任意位置可能会探出一个鼹鼠的头,如果用锤子 打中即得一分,锤子活动的范围是以d(1=<d<=5)为半径的圆中可到达的坐标点,并且是直线移动,锤子可以移动到任意位置,同一时间同一 地点

1720

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

POJ 3034 Whac-a-Mole(DP)

题目链接 题意 : 在一个二维直角坐标系中,有n×n个洞,每个洞的坐标为(x,y),0 ≤x,y<n,给你一把锤子可以打到地鼠,最开始的时候,你可以把锤子放在任何地方,如果你上一秒在(x1,y1),那下一秒直线移动到的整数点(x2,y2)与这个点的距离小于等于d,并且当锤子移动(x2,y2)这个点时,所有在两点的直线上的整点数都可以打到。例如(0,0)移动到(0,3)。如果(0,...

weixin_30628801的博客 146

POJ 3034 Whac-a-Mole [DP]

题意:略。 思路:第一次写的时候搞复杂了,弄得跟计算几何似的= = 递推公式很好想,就是dp[x2][y2][t] = max(dp[x2][y2][t], dp[x1][y1][t-1] + online(x2, y2, x1, y1)。 其中dp[x2][y2][t]表示在时间点t锤子选择砸到点(x2, y2)处时的最大积分,点(x1, y1)与点(x2, y2)距离不大于d,onlin...

weixin_30416871的博客 127

POJ 3034 Whac-a-Mole(DP)

题目链接 理解了题意之后,这个题感觉状态转移还是挺好想的,实现起来确实有点繁琐,代码能力还有待加强,经过很长时间才发现bug。注意坐标可能是负的。 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <cmath> 5 #inc...

weixin_30819163的博客 107

poj3034--Whac-a-Mole(dp)

题目链接:点击打开链接 题目大意:砸地鼠游戏,n*n的方格,锤子每次最多移动d,地鼠在t时刻出现在(x,y)时间,维持一个单位时间,不会在同一时间同一位置出现两只老鼠,锤子可以砸经过的地鼠,问最多可以砸多少地鼠。(初始锤子可以在任意位置) dp[t][i][j]:t时刻在锤子在(i,j)位置时能砸到的最多的地鼠个数 状态转移方程:因为锤子最多移动d,所以枚举(x-d,y-d)到(x+d,y+

随风的专栏 1455

poj3034Whac-a-Mole(dp)

链接 状态转移好想 不过有坑 大家都犯的错误 我也会犯 很正常 就是锤子可以移到n*n以外 要命的是我只加了5 以为最多不会超过5 WA了N久 才想到 上下两方向都可以到5 所以最多加10 以时间和坐标进行DP 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring&gt...

weixin_30666753的博客 83

poj3034 Whac-a-Mole (dp)

打地鼠游戏,dp好题,麻烦的不是写出dp方程,而是求出从(x1,y1)到(x2,y2)这条直线上经过那些整数坐标,利用gcd求出来,并且需要知道的一点是中间的某个点可能跑出到矩形外面,处理跑出矩形外地点只需要扩大范围就行了,行列各增加10,让冒出地鼠的坐标响应的+5即可,dp[t][x][y]表示时刻t坐标xy出得最大个数,那么此状态可能是由上一个状态dp[t-1[i][j]转移过来的,其中(i,...

weixin_30414155的博客 97

POJ 3034 Whac-a-Mole(三维dp+处理小技巧)

题意:打地鼠,n*n的棋盘,每秒特定的格子上会有地鼠出没。给一个锤子,比如锤子前一次在(x1, y1),现在移动到(x2, y2)。则它可以打掉(x1, y1) -> (x2, y2)连线上的所有地鼠。锤子每次最多移动的距离为d。求最后最多能打到多少个地鼠。

I am a slow walker, but I never walk backwards! 1230

POJ 3034 Whac-a-Mole

Whac-a-MoleTime Limit: 2000MSMemory Limit: 65536KTotal Submissions: 3070Accepted: 922DescriptionWhile visiting a traveling fun fair you suddenly have an urge to break the high score in the Whac-a-Mole

码代码的猿猿 705

POJ 3034 Whac-a-Mole

题目大意: 打地鼠游戏,n*n的矩阵,每一个整数点(x,y)都有一个鼠洞,某个老鼠在某个鼠洞出现的时间只有一秒。游戏者拿着锤子,锤子可以在任意一个整数点上(不一定在矩阵内)。游戏者每一秒可以将锤子从当前位置直线移动到下一位置(整数点)。两位置之间的距离不超过d。移动的直线路径穿过的(过整数点中心的)鼠洞如果有老鼠,都会被打晕。例如(0,0)移动到(0,3)。如果(0,1),(0,2)有老鼠出

脑残的孩子只有慢慢学。。 7735
上一篇: [poj 1925] Spiderman 简单dp
下一篇: [poj 3254] Corn Fields  状态压缩DP(递推)
ALPS233
博客等级 码龄11年 25粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值