紫書習題 7 1 UVa 208 (爆搜加剪枝)

2021-07-26 04:12:17 字數 1052 閱讀 6836

題意:構造出一張圖,給出乙個點,字典序輸出所有從1到該點的路徑。

解題方法:裸蒐會超時的題目,其實題目的資料特地設計得讓圖稠密但起點和終點卻不相連,所以直接搜尋過去會超時。只要判斷下起點和終點能不能相連就行了,可以用並查集也可以用floyd演算法,這樣就能過了。還有一種就是我們可以先將所有與目標點聯通的點存於乙個陣列中,僅在這個陣列中查詢,就省去很多無謂的查詢時間。

**如下: (用floyd寫的)

#include 

using

namespace

std;

const

int inf = 0x3f3f3f3f;

int maze[30][30], dis[30][30];

bool vis[30];

int ans[30];

int dest, sum, cur_max_v;

void getmax(int &x, int y)

void dfs(int u, int cnt)

printf(" %d\n", dest);

sum++;

return ;

}for(int i = 1; i <= cur_max_v; i++)

}}int main()

}memset(maze, 0, sizeof(maze));

memset(ans, 0, sizeof(ans));

memset(vis, false, sizeof(vis));

while(scanf("%d%d", &x, &y))

}for(int i = 1; i <= cur_max_v; i++)}}

}sum = 0;

vis[1] = 1;

printf("case %d:\n", ++ks);

dfs(1, 1);

printf("there are %d routes from the firestation to streetcorner %d.\n", sum, dest);

}return

0;}

紫書 習題 9 8 uva1632

題意 有n個寶藏,每個都在乙個位置p i 在規定的時間t i 就會消失。阿里巴巴要在寶藏消失前收集齊所有寶藏,問 有方法嗎?有的話最少多少秒?思路 開始想的是用狀態轉移方程來乙個個判斷,不好寫。看了題解知道在一段區間 l,r 要使時間最短必須從端點出來,然後果斷寫了乙個記憶化搜尋,tle了。再看題解...

紫書 習題 9 8 uva 10163

解題感想 好久沒刷題了,自己連揹包dp都差不多忘了。題目看著很複雜,可以將問題分解來看,和高中數學題的感覺一樣 1.求任意一組組合的最小的保護值 的最大值 2.求在改最大組合的情況下的,求最小的工資和,和某圖論一樣的思路。解題思路 第乙個揹包 任意組合 抽象成模板 在n個應聘者中選x人使得看守m個倉...

紫書 習題8 12 UVa 1153(貪心)

本來以為這道題是考不相交區間,結果還專門複習了一遍前面寫的,然後發現這道題的區間是不是 固定的,是在乙個範圍內 滑動的 只要右端點不超過截止時間就ok。然後我就先考慮有包含關係的時候怎麼選,然後發現當兩個區間只能放乙個的時候時間更短而截 至時間更長的時候,顯然更優。然後我就試著每個區間放的時候後後面...