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)的更多相关文章

  1. 【BZOJ】1068: [SCOI2007]压缩(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1068 发现如果只设一维的话无法转移 那么我们开第二维,发现对于前i个来说,如果确定了M在哪里,第i个 ...

  2. 【51nod1519】拆方块[Codeforces](dp)

    题目传送门:1519 拆方块 首先,我们可以发现,如果第i堆方块被消除,只有三种情况: 1.第i-1堆方块全部被消除: 2.第i+1堆方块全部被消除:(因为两侧的方块能够保护这一堆方块在两侧不暴露) ...

  3. 【bzoj1925】地精部落[SDOI2010](dp)

    题目传送门:1925: [Sdoi2010]地精部落 这道题,,,首先可以一眼看出他是要我们求由1~n的排列组成,并且抖来抖去的序列的方案数.然后再看一眼数据范围,,,似乎是O(n^2)的dp?然后各 ...

  4. 【POJ】3616 Milking Time(dp)

    Milking Time Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10898   Accepted: 4591 Des ...

  5. 【POJ】2385 Apple Catching(dp)

    Apple Catching Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13447   Accepted: 6549 D ...

  6. 【vijos】1764 Dual Matrices(dp)

    https://vijos.org/p/1764 自从心态好了很多后,做题的确很轻松. 这种题直接考虑我当前拿了一个,剩余空间最大能拿多少即可. 显然我们枚举每一个点拿出一个矩形(这个点作为右下角), ...

  7. 【Luogu】P3856公共子串(DP)

    题目链接 DP.设last[i][j]是第i个串字符'j'所在的最后的位置,f[i][j][k]是第一个串匹配到i,第二个串匹配到j,第三个串匹配到k,最多的公共子串数. 那么我们三重循环i.j.k, ...

  8. 【Luogu】P3847调整队形(DP)

    题目链接 DP果真是考思维啊 增加一个数的操作等价于删掉那个不和谐的数的操作. 所以1.2操作可以忽略. 剩下3.4操作,则可以设计f[i][j]是将区间[i,j]变成回文序列需要的操作数. if(a ...

  9. 【Luogu】P1586四方定理(DP)

    题目链接 此题使用DP.设f[i][j]表示数i用j个数表示,则对于所有的k<=sqrt(i),有 f[i][j]=∑f[i-k*k][j-1] 但是这样会有重复情况.所以先枚举k,再枚举i和j ...

随机推荐

  1. Codechef STREDUC Reduce string Trie、bitset、区间DP

    VJ传送门 简化题意:给出一个长度为\(l\)的模板串\(s\)与若干匹配串\(p_i\),每一次你可以选择\(s\)中的一个出现在集合\(\{p_i\}\)中的子串将其消去,其左右分成的两个串拼接在 ...

  2. Luogu3320 SDOI2015 寻宝游戏 链并

    传送门 可以发现从哪里开始的最优答案都是一样的.我们只需要用一种比较好维护的方法维护答案就好了. 我们考虑用$dfs$序加上$set$维护链并.先预处理$dfs$序,将当前有宝藏的点丢入$set$中, ...

  3. springboot启动后总是自己shutdown

    现象 这几天一直被一个问题困扰,每次springboot的tomcat启动之后, 然后过了一段时间看, 进程就突然自己关闭掉了. 然后日志是: ationConfigEmbeddedWebApplic ...

  4. [Oracle]ORA-600[kdBlkCheckError]LOB坏块处理

    [Oracle]ORA-600[kdBlkCheckError]LOB坏块处理 客户环境报如下错误: ORA - 00600: Internal error code, arguments: [kdB ...

  5. springboot @Value 获取计算机中绝对路径文件的内容

    默认情况下使用 @Value("aaa.txt") private Resource txtResource; 这样获取到的是项目classpath 下的 aaa.txt 如果想获 ...

  6. C/C++中连接函数strcat的应用(简单讲解)

    有位学弟问到我如何将两个字符连接起来,想想java/python里面可以直接用+连接起来,可是C/C++里面有没有这么方便的做法呢? 答案是有的,在C语言的string.h库中有个神奇的函数叫做str ...

  7. openpyxl 实现excel字母列号与数字列号之间的转换

    https://www.cnblogs.com/apple2016/p/9686433.html

  8. 不重叠的线段 51nod

    链接 [http://www.51nod.com/onlineJudge/questionCode.html#problemId=1133&noticeId=468024] 题意 X轴上有N条 ...

  9. 四则运算法则在Java中的实现

    软件工程的课程已经上过有一段时间了,前段时间由于比较忙着考试,所以关于四则运算的代码一直没有实现.同时由于近来一段时间一直在自学java,因为C++虽然也是面向对象,而且可以开发很多软件或者程序,但是 ...

  10. docker安装后启动出现错误

    重启报错: [root@localhost ~]# systemctl restart docker Job for docker.service failed because the control ...