首页 > 其他分享 >搜集糖果

搜集糖果

时间:2022-11-22 19:36:20浏览次数:48  
标签:nx .. 搜集 ny flag dx dy 糖果


 搜集糖果(candy)

【题目描述】

在一片N*M的四连通(一个点与它上方、下方、左方、右方这四个点连通)田野中,散布着很多很多的糖果。Ryz现在要以(x,y)为起点去搜集糖果。Ryz搜集当前点的糖果并走到下一格需要一个单位时间。由于田野中还有许多其它的喜欢吃糖果的小动物,所以每过一个单位时间,所有格子上的糖果都会减少一半。Ryz不喜欢做徒劳的工作,所有同一个格子不能走两遍。如果当前点周围所有连通的格子都已经被走过了,那么这次搜集就结束了。现在请你帮助他收集尽量多的糖果,输出你的移动序列,用”U”代表向上,”D”代表向下,”R”代表向右,”L”代表向左。

【输入格式】

         第一行两个正整数N,M,x,y,表示地图大小和初始位置。

         接下来的N行M列描述了每个格子的初始糖果s[i][j]。

【输出格式】

         一行若干个字符,表示你的移动序列。

【输入样例1】

2 2 1 1

1 16

8 4

【输出样例1】

RDL

【输入样例2】

3 3 1 1

6 9 4

7 1 3

8 2 5

【输出样例2】

RRDDLLUR

【数据范围与约定】

对于100%的数据,n<=100,m<=100,0<=s[i][j]<=100000

对于100%的数据,s[i][j]互不相等。

下表列出了各个数据点n,m的范围。

数据编号

n,m

数据编号

n,m

1

<=5

6

<=60

2

<=5

7

<=60

3

<=20

8

<=80

4

<=20

9

<=80

5

<=40

10

<=100

 题解:这是一道很玄学的搜索题,主要思想就是:我们先向前走N步(N要适当,大了会超时,小了会WA),然后选择最优的一条路走,直至走完。能否AC各凭天运吧。

Code:

{$M 20000000,0,maxlongint}
var
n,m,x,y,i,j,ans:longint;
t:array[0..18]of int64;
dx,dy:array[1..4]of longint;
dd:array[1..4]of char;
s:array[0..101,0..101]of longint;
flag:array[0..101,0..101]of boolean;
procedure dfs1(x,y,z:longint;num:int64);
var i,nx,ny:longint;
begin
if num>ans then ans:=num;
if z>=13 then exit;
for i:=1 to 4 do
begin
nx:=x+dx[i];
ny:=y+dy[i];
if (nx<1)or(ny<1)or(nx>n)or(ny>m)or flag[nx,ny] then continue;
flag[nx,ny]:=true;
dfs1(nx,ny,z+1,num+t[13-z-1]*s[nx,ny]);
flag[nx,ny]:=false;
end;
end;
procedure dfs2(x,y:longint);
var i,nx,ny,sx,sy,si,max:longint;
begin
max:=-1<<29;
for i:=1 to 4 do
begin
nx:=x+dx[i];ny:=y+dy[i];
if (nx<1)or(ny<1)or(nx>n)or(ny>m)or flag[nx,ny] then continue;
flag[nx,ny]:=true;
ans:=0;
dfs1(nx,ny,0,t[13]*s[nx,ny]);
flag[nx,ny]:=false;
if ans>max then
begin
max:=ans;sx:=nx;sy:=ny;si:=i;
end;
end;
if max=-1<<29 then exit;
write(dd[si]);
flag[sx,sy]:=true;
dfs2(sx,sy);
end;
begin
assign(input,'candy.in');reset(input);
assign(output,'candy.out');rewrite(output);
dx[1]:=-1;dy[1]:=0;dd[1]:='U';
dx[2]:=0;dy[2]:=-1;dd[2]:='L';
dx[3]:=0;dy[3]:=1;dd[3]:='R';
dx[4]:=1;dy[4]:=0;dd[4]:='D';
readln(n,m,x,y);
t[0]:=1;
for i:=1 to 17 do t[i]:=t[i-1]*2;
for i:=1 to n do
for j:=1 to m do read(s[i,j]);
flag[x,y]:=true;
dfs2(x,y);writeln;
close(input);close(output);
end.

 

标签:nx,..,搜集,ny,flag,dx,dy,糖果
From: https://blog.51cto.com/u_15888102/5878376

相关文章

  • 内网入侵搜集
    theme:devui-blue一、windows局域网的一个经典的入侵方法:(系统入侵)STEP:我的电脑右键单机管理,然后点操作底下的->输入对方ip连接到另外一个计算机。若不知道对方ip......
  • 01. 信息搜集:Web 1~10
    目录web1知识点题解web2知识点题解web3知识点题解web4知识点题解web5知识点题解web6知识点题解web7知识点题解web8知识点题解web9知识点题解web10知识点题解web1知识点......
  • 题解 LGP7909 【[CSP-J 2021] 分糖果】
    postedon2021-10-2322:52:47|under题解|source分类讨论。一句话题意:求\(\max\limits_{i=l}^{r}\{i\bmodn\}\)首先画个数轴,按除以\(n\)向下取整的商把这些整......
  • 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码
    1.贪心算法概览贪心算法是一种算法思想。希望能够满足限制的情况下将期望值最大化。比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树等问题都希望满足限制的情......
  • ctf web1信息搜集与爆破
    一般做题顺序(危害递增):读取写入执行常见状态码:200:成功301、302:跳转404:找不到资源403:禁止访问500:服务器错误502:错误网关,无效网关...信息泄露:http信息泄露(......
  • 代码随想录day34 | 1005.K次取反后最大化的数组和 134.加油站 135. 分发糖果
    1005.K次取反后最大化的数组和题目|文章思路如何让翻转后的数组和最大,就是尽可能的反转绝对值大的负数。当反转次数多余时,不断反转绝对值最小的数。首先将整个数组按......
  • 135.candy 分发糖果
    问题描述135.分发糖果解题思路本题的关键在于,需要一次从前往后的遍历,第一次确定最少糖果数,同时还需要从后往前遍历,再一次确定最少糖果数。代码classSolution{publi......
  • 力扣575(java&python)-分糖果(简单)
    题目:Alice有n枚糖,其中第i枚糖的类型为candyType[i]。Alice注意到她的体重正在增长,所以前去拜访了一位医生。医生建议Alice要少摄入糖分,只吃掉她所有糖的n/2......
  • 洛谷P2512 [HAOI2008]糖果传递
    SLOJP1117.糖果传递题目描述有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为11。输入格式小朋友个数n,下面n行ai​......
  • 【LeetCode】1431. 拥有最多糖果的孩子(C++)
    1431.拥有最多糖果的孩子(C++)​​1题目描述​​​​2示例描述​​​​2.1示例1​​​​2.2示例2​​​​2.3示例3​​​​3解题提示​​​​4源码详解(C++)​​1题......