uva 707(記憶化搜尋)
思路:此題需要記憶化搜尋,dp[x][y][t]表示當前狀態下是否是否有可能點(x,y)上有賊,0表示不可能,1表示可能,然後及時記憶化搜尋。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 #define MAXN 111 8 typedef pair<int,int>PP; 9 10 int n,m,Time,cnt;View Code11 int dp[MAXN][MAXN][MAXN]; 12 int dir[5][2]={{0,-1},{-1,0},{0,1},{1,0},{0,0}}; 13 vector<vector<PP> >ans; 14 15 bool Judge(int x,int y) 16 { 17 if(x>=1&&x<=m&&y>=1&&y<=n)return true; 18 return false; 19 } 20 21 bool dfs(int x,int y,int t) 22 { 23 if(dp[x][y][t]!=-1)return dp[x][y][t]; 24 if(t>=Time){ 25 cnt++; 26 ans[t].push_back(make_pair(x,y)); 27 return dp[x][y][t]=1; 28 } 29 dp[x][y][t]=0; 30 for(int i=0;i<5;i++){ 31 int xx=x+dir[i][0],yy=y+dir[i][1]; 32 if(!Judge(xx,yy))continue; 33if(dfs(xx,yy,t+1)){ 34 dp[x][y][t]=1; 35 } 36 } 37 if(dp[x][y][t]==1){ 38 ans[t].push_back(make_pair(x,y)); 39 } 40 return dp[x][y][t]; 41 } 42 43 44 int main() 45 { 46 int T,t,a,b,c,d,Cas=1,flag; 47 while(~scanf("%d%d%d",&n,&m,&Time)){ 48 if(n==0&&m==0&&Time==0)break; 49 scanf("%d",&T); 50 memset(dp,-1,sizeof(dp)); 51 while(T--){ 52 scanf("%d%d%d%d%d",&t,&a,&b,&c,&d); 53 for(int i=b;i<=d;i++) 54 for(int j=a;j<=c;j++) 55 dp[i][j][t]=0; 56 } 57 ans.clear(); 58 ans.resize(MAXN); 59 cnt=flag=0; 60 for(int i=1;i<=m;i++){ 61 for(int j=1;j<=n;j++){ 62 if(dp[i][j][1]==-1)dfs(i,j,1); 63 } 64 } 65 printf("Robbery #%d:\n",Cas++); 66 if(cnt==0){ 67 puts("The robber has escaped."); 68 }else { 69 for(int i=1;i<=Time;i++){ 70 if((int)ans[i].size()==1){ 71 flag=1; 72 printf("Time step %d: The robber has been at %d,%d.\n",i,ans[i][0].second,ans[i][0].first); 73 } 74 } 75 if(!flag)puts("Nothing known."); 76 } 77 puts(""); 78 } 79 return 0; 80 } 81 82 83 84 85 86 87 88
相關推薦
uva 707(記憶化搜尋)
思路:此題需要記憶化搜尋,dp[x][y][t]表示當前狀態下是否是否有可能點(x,y)上有賊,0表示不可能,1表示可能,然後及時記憶化搜尋。 1 #include<iostream>
UVA 1630 記憶化搜尋
題意 輸入一個字串,摺疊成一個儘量短的串。問最短可以摺疊成什麼樣子的一個串。 題解 設dp[i][j]為字串i到j摺疊成最短的字串後的長度,ss[i][j]為字串i到j摺疊成的最短的字串。DFS+記憶化搜尋即可。 注意事項 輸入的字串右邊界為s
uva 10285 記憶化搜尋
求矩陣中最長遞減路徑的長度,記憶化搜尋,因為要找的路徑是嚴格遞減的,所以不會有回頭路 Sample Input 2 Feldberg 10 5 56 14 51 58 88 26 94 24 39 41 24 16 8 51 51 76 72 77 43 10 38 50
uva 437(不用記憶化搜尋解)
思路:放程式碼上了 程式碼如下: /* 最優解是max height 最優子結構是以i方塊作為最後一塊的最大長度 子問題的最優解是以前1,2,3...i-1個方塊作為最後一塊的最大長度 顯然:最優子結構包含了子問題的最優解 並且這些子問題的解之間相互獨立(其中一個問題的解,不會影響另
uva 10118 免費糖果 深搜+記憶化搜尋
http://www.cnblogs.com/kedebug/archive/2013/04/07/3006493.html #include<stdio.h> #include<string.h> #define N 45 #define C
UVa 10118 Free Candies (記憶化搜尋+狀態壓縮)
題目連結:https://cn.vjudge.net/problem/UVA-10118 思路:設dp[pa][pb][pc][pd]四堆糖分別取到這四堆的第pa、pb、pc、pd顆時最多的pair數, 用一個二進位制串記錄籃中糖的狀態(即哪些糖有那些沒有)。狀態轉移一共四
Pebble Solitaire+uva+狀態壓縮+記憶化搜尋
Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Description Problem A Pebble Solitaire Input: standard in
UVa 免費糖果(記憶化搜尋)
在狀態複雜,資訊多且資料小的情況下可以選擇考慮記憶化搜尋.這題我就做的很zz,一開始已知想打一個dp, 不過太麻煩了.看了解題報告之後才發現記憶化搜尋這麼簡單 #include<
【10.31校內測試】【組合數學】【記憶化搜尋/DP】【多起點多終點二進位制拆位Spfa】
Solution 注意取模!!! Code #include<bits/stdc++.h> #define mod 1000000007 #define LL long long using namespace std; int n, a, b;
icpc 2018 徐州 網路賽 B 博弈+記憶化搜尋
In a world where ordinary people cannot reach, a boy named "Koutarou" and a girl named "Sena" are playing a video game. The game system of this vide
洛谷P3387 縮點模板(縮點+記憶化搜尋)
題目連結:https://www.luogu.org/problemnew/show/P3387 如果你還不會Tarjan縮點,我見一你還是先看看這篇部落格:https://www.cnblogs.com/WWHHTT/p/9825766.html 或者過一段時間再來 首先我們分析題目,要求出圖中的一條
BZOJ 1415 聰聰和可可 (Dijkstra預處理 + 期望DP + 記憶化搜尋)
任重而道遠 Input 資料的第1行為兩個整數N和E,以空格分隔,分別表示森林中的景點數和連線相鄰景點的路的條數。 第2行包含兩個整數C和M,以空格分隔,分別表示初始時聰聰和可可所在的景點的編號。 接下來E行,每行兩個整數,第i+2行的兩個整數Ai和Bi表示景點Ai和景點Bi之間有一條
CodeForces - 208B Solitaire 記憶化搜尋
A boy named Vasya wants to play an old Russian solitaire called "Accordion". In this solitaire, the player must observe the following rules: A de
ACM-ICPC 2018 徐州賽區網路預賽 B. BE, GE or NE (記憶化搜尋)
題意 兩個人在玩遊戲,有一個初始的分數,每次輪流玩遊戲有三種操作,當前數字加上A,當前數字減去B,當前數字乘上-1,當最終分數>h 的時候就是good ending,小於l的時候就是bad ending ,其他的都是 Normal Ending。 思路 從第一次操作開始記憶化搜,
hdu-1142(記憶化搜尋+dij)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1142 思路:1、不是求最短路徑,而是求如果兩個點A,B直接相連,且A到終點的距離大於B到終點的距離,求這樣A,B之間的通路的個數。 2、以終點為起點來進行dij 3、記憶化搜尋是,用p[i]陣列記錄符合條件
Gym - 101889E 記憶化搜尋
思維還是太將江華,開始一直想dp,就是這一位餘數固定時取最小的一個字串,但是字串太大,賦值的時候超時,其實根本沒必要存字串,只要記憶化搜尋,看看[pos][res]這個狀態是否能構成就行,這樣的話1000*1000個狀態, 穩穩的,然後貪心從小列舉,第一個可行的一定是最優解。 #includ
滑雪 POJ - 1088 (記憶化搜尋/動態規劃)
傳送門 題意:找出一條降序的路徑,使得這條路徑最長,輸出長度即可。 題解:對於每個點都進行dfs,dfs的同時進行記憶化搜尋即可。 附上程式碼: #include<iostream> #include<cstdio> using namespace std
Saruman’s Level Up Gym - 101656G —— 記憶化搜尋
Saruman’s Level Up Saruman’s army of orcs and other dark minions continuously mine and harvest lumber out of the land surrounding his mighty tower
【UVA11324】 The Largest Clique (Tarjan+topsort/記憶化搜尋)
UVA11324 The Largest Clique 題目描述 給你一張有向圖 \(G\),求一個結點數最大的結點集,使得該結點集中的任意兩個結點 \(u\) 和 \(v\) 滿足:要麼 \(u\) 可以達 \(v\),要麼 \(v\) 可以達 \(u\)(\(u,v\)相互可達也行)。 輸入輸出格式