【ZOJ2278】Fight for Food(dp)
BUPT2017 wintertraining(16) #4 F
ZOJ - 2278
题意
给定一个10*10以内的地图,和p(P<=30000)只老鼠,给定其出现位置和时间T(T<=1,000,000,000),求最多抓到几只老鼠。
题解
DP,f[i]表示按时间排序后抓第i个老鼠,最多能抓多少只。
bfs计算每对位置之间的距离\(dis[x1][y1][x2][y2]\)。
\(f[i]=max(f[i],f[j]+1)\)当i,j两只老鼠的距离小于他们的时间差。
j只用往前枚举50就够了,因为总共就10*10的地图。
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define N 30005
#define inf 0x3f3f3f3f
using namespace std;
struct node{int x,y,t;}a[N];
int n,m,p;
int f[N],ans;//经过第i个最多经过几个
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int mm[20][20];
int dis[20][20][20][20];
bool cmp(const node& a,const node& b){
return a.t<b.t;
}
void bfs(int x,int y){
dis[x][y][x][y]=0;
queue<node>q;
q.push((node){x,y});
while(!q.empty()){
node k=q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=k.x+dx[i],ny=k.y+dy[i];
if(nx>=0&&ny>=0&&nx<n&&ny<m&&mm[nx][ny]
&&dis[x][y][nx][ny]==inf){
dis[x][y][nx][ny]=dis[x][y][k.x][k.y]+1;
q.push((node){nx,ny});
}
}
}
}
int main() {
while(~scanf("%d%d",&n,&m)){
memset(f,-inf,sizeof f);
memset(dis,inf,sizeof dis);
f[0]=ans=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
char c;
scanf(" %c",&c);mm[i][j]=(c!='#');
if(c=='L')a[0]=(node){i,j,0};
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)if(mm[i][j])bfs(i,j);
scanf("%d",&p);
for(int i=1;i<=p;i++){
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].t);
a[i].x--;a[i].y--;
}
sort(a+1,a+1+p,cmp);
for(int i=1;i<=p;i++){
for(int j=max(i-50,0);j<i;j++){
if(f[j]!=-inf&&dis[a[j].x][a[j].y][a[i].x][a[i].y]<=a[i].t-a[j].t)
f[i]=max(f[i],f[j]+1);
}
ans=max(f[i],ans);
}
printf("%d\n",ans);
}
return 0;
}
【ZOJ2278】Fight for Food(dp)的更多相关文章
- 【BZOJ】1068: [SCOI2007]压缩(dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1068 发现如果只设一维的话无法转移 那么我们开第二维,发现对于前i个来说,如果确定了M在哪里,第i个 ...
- 【51nod1519】拆方块[Codeforces](dp)
题目传送门:1519 拆方块 首先,我们可以发现,如果第i堆方块被消除,只有三种情况: 1.第i-1堆方块全部被消除: 2.第i+1堆方块全部被消除:(因为两侧的方块能够保护这一堆方块在两侧不暴露) ...
- 【bzoj1925】地精部落[SDOI2010](dp)
题目传送门:1925: [Sdoi2010]地精部落 这道题,,,首先可以一眼看出他是要我们求由1~n的排列组成,并且抖来抖去的序列的方案数.然后再看一眼数据范围,,,似乎是O(n^2)的dp?然后各 ...
- 【POJ】3616 Milking Time(dp)
Milking Time Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10898 Accepted: 4591 Des ...
- 【POJ】2385 Apple Catching(dp)
Apple Catching Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13447 Accepted: 6549 D ...
- 【vijos】1764 Dual Matrices(dp)
https://vijos.org/p/1764 自从心态好了很多后,做题的确很轻松. 这种题直接考虑我当前拿了一个,剩余空间最大能拿多少即可. 显然我们枚举每一个点拿出一个矩形(这个点作为右下角), ...
- 【Luogu】P3856公共子串(DP)
题目链接 DP.设last[i][j]是第i个串字符'j'所在的最后的位置,f[i][j][k]是第一个串匹配到i,第二个串匹配到j,第三个串匹配到k,最多的公共子串数. 那么我们三重循环i.j.k, ...
- 【Luogu】P3847调整队形(DP)
题目链接 DP果真是考思维啊 增加一个数的操作等价于删掉那个不和谐的数的操作. 所以1.2操作可以忽略. 剩下3.4操作,则可以设计f[i][j]是将区间[i,j]变成回文序列需要的操作数. if(a ...
- 【Luogu】P1586四方定理(DP)
题目链接 此题使用DP.设f[i][j]表示数i用j个数表示,则对于所有的k<=sqrt(i),有 f[i][j]=∑f[i-k*k][j-1] 但是这样会有重复情况.所以先枚举k,再枚举i和j ...
随机推荐
- Eclipse-设置选中高亮显示
高亮显示选中的变量对于程序员编程很有帮助,正常情况下Eclipse选中变量时都会高亮显示,可能软件冲突导致高亮显示失效,通过如下方法可以进行恢复. 单击IDE顶部Window菜单下的Preferenc ...
- vba基础知识
VBA中dim,static和public,private的区别 转载的文章:出自 红袖的博客http://blog.sina.com.cn/19850701xx 1.Public和Priva ...
- LOJ2803 CCC2018 平衡树 数论分块、记忆化搜索
传送门 题意差评,其实就是一个递推式:\(f_1 = 1 , f_i = \sum\limits_{j=2}^i f_{\lfloor \frac{i}{j} \rfloor}\),然后求\(f_N\ ...
- CF1039D You Are Given a Tree 根号分治、二分、贪心
传送门 似乎直接做不太好做-- 当你不会做的时候就可以考虑根号算法了(或许是这样的 考虑如果只有一个询问如何计算答案. 显然是可以贪心的,思路与NOIP2018D1T3是相同的.每一个点向上传一条链, ...
- LOJ2538 PKUWC2018 Slay the Spire DP
传送门 不想放题面了,咕咕咕咕咕 这个期望明明是用来吓人的,其实要算的就是所有方案的最多伤害的和. 首先可以知道的是,能出强化牌就出强化牌(当然最后要留一张攻击牌出出去),且数字尽量大 所以说在强化牌 ...
- WebForms UnobtrusiveValidationMode requires a ScriptResourceMapping for 'jquery'. Please add a ScriptResourceMapping named jquery(case-sensitive).
新开一个Web site.没有使用jQuery,当Insus.NET使用一些验证控件时,如RequiredfieldValidator,程序出现下面错误: WebForms UnobtrusiveVa ...
- (转)Ubuntu init启动流程分析
原文 upstart homepage 现行的Linux distros主流的有两种init方式:一种是广为流传的System V initialization,它来源于Unix并且至今仍被各种Lin ...
- http指南(2)--代理
代理 单个客户端专用的代理称为私有代理,众多客户端共享的代理被称为公共代理 代理与网关的对比:代理连接的是两个或多个使用相同协议的应用程序,而网关连接的则是两个或多个使用不同协议的端点.网关扮演的是“ ...
- PHP 设置调试工具XDebug PHPStorm IDE
先下载PHP扩展Xdebug https://xdebug.org, 可以复制自己的phpinfo粘贴到https://xdebug.org/wizard.php中, 会生成需要下载的版本, php. ...
- 复审Partner
复审代码后,发现了一些问题: 首先说优点:代码十分工整,很清晰,各种类易于理解,逻辑上很通顺. 基本实现了代码功能,输出正确. 发现的缺点:对于文件后缀的识别有点问题,不能识别所需求的所有文件,只有一 ...