JZOJ B組 逃離迷宮

2021-08-28 09:16:44 字數 1235 閱讀 4023

description

ryz被困在了乙個n*m四連通網格圖的迷宮中,每走一步需要消耗一定的體力,消耗的體力等於格仔的高度差的平方。在迷宮的某一些格仔上有體力藥水,可以恢復ryz一定的體力。現在ryz希望消耗最少的體力值到達迷宮出口,請你計算出這個最小的體力值。

你可以認為ryz一開始有足夠多的體力。

input

第一行7個正整數n,m,k,sx,sy,tx,ty分別表示迷宮的長度,寬度,體力藥水的數量,起點座標和終點座標。

接下來是乙個n行m列的矩陣,描述每乙個格仔的高度。

接下來k行,每行3個整數x,y,s,表示在第x行第y列的這個格仔中有一瓶能夠恢復s體力的藥水。

output

僅乙個整數,表示最小消耗的體力值,有可能是負數。

sample input

3 3 1 1 1 1 3

1 2 3

4 3 0

5 6 5

3 3 13

sample output

-1data constraint

對於20%的資料,k=0。

對於60%的資料,n<=20,m<=20,k<=10

對於100%的資料,n*m<=1000,k<=15,s<=10^5,0<=h<10

思路顯然,在走的過程中,要麼走向下乙個藥水所在點,要麼走向終點,角色肯定不會亂逛。所以把起終點也算作是一種恢復體力值為0的藥水,然後預處理出藥水之間的距離,狀壓dp即可。

**

#include #include #include #include #define sqr(x) (x*x)

using namespace std;

struct edge ;

int dx[4]=,dy[4]=;

long long n,m,k,sx,sy,tx,ty,x[20],y[20],c[20],h[110][110],g[20][20],f[20][110][110],dp[20][(1<<16)+10],ans;

bool pd(int x,int y)

void bfs()

); f[i][x[i]][y[i]]=0;

while (!q.empty()));}

}} for (int j=0;j<=k+1;j++) if(i!=j) g[i][j]=f[i][x[j]][y[j]]; }}

int main()

printf("%lld",ans);

}

JZOJ B組 幸運數

description 如果乙個正整數的所有質因子都小於等於m且每種質因子個數都為奇數,則稱這個數為幸運數,例如當m 3時,6是幸運數而5不是,12也不是幸運數 2這個質因子有偶數個 給定n,m,求小於等於n的幸運數有多少個。input 一行2個數,表示n,m。output 一行1個數,表示幸運數的...

dfs bfs 逃離迷宮

給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...

A 逃離迷宮 DFS

給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...