hello-world
posts - 11, comments - 2, trackbacks - 0, articles - 0
導(dǎo)航
C++博客
首頁
新隨筆
聯(lián)系
聚合
管理
<
2009年2月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(1)
給我留言
查看公開留言
查看私人留言
隨筆檔案
2009年3月 (2)
2009年2月 (9)
文章分類
Waterloo
friends
topsky
members of hello_world
chinaeli
logics_space
lwc626
搜索
最新評論
1.?re: Waterloo local 1999.10.02
@秋風(fēng)
但直接求不好求,你是直接求的嗎?可不可以說詳細(xì)點(diǎn)
--hello_world
2.?re: Waterloo local 1999.10.02
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--秋風(fēng)
閱讀排行榜
1.?Waterloo Local 2001.09.29 && 2002.01.26 && 2002.07.01(1834)
2.?Waterloo local 2001.09.22(1656)
3.?Waterloo local 2000.09.30 && 2000.09.23(1522)
4.?Waterloo local contest 1998(1332)
5.?Waterloo local 2001.01.27(1310)
評論排行榜
1.?Waterloo local 1999.10.02(2)
2.?Waterloo local 2000.01.29(0)
3.?Waterloo local 2000.09.30 && 2000.09.23(0)
4.?Waterloo local 2001.01.27(0)
5.?Waterloo local 2001.06.02(0)
Waterloo local 1999.09.25
Posted on 2009-02-09 19:02
hello_world
閱讀(1168)
評論(0)
編輯
收藏
引用
Waterloo local 1999.09.25
題目分類
Fire Station
圖論,最短路
Soundex
水題
Ferry Loading
DP
Dog & Gopher
水題
Gas Station Numbers
分析,倒推
補(bǔ)充:
Fire Station:
題目給出一些交叉路口,有
些路口建有消防站,因此每個路口都有一個離自己最近的消防站,在這些最短的距離中找出最長的!題目要求再建一個消防站(要求編號最小),使這個最長距離最短!考慮到每個路口最多只有二十條邊(題目意思),所以可以用鄰接表存圖然!然后用Dijkstra(或者spfa)算出所有點(diǎn)對之間的最短距離(當(dāng)然Floyd也行,但是可能要慢很多),求出剛開始的最長距離,從小到大枚舉每一個路口,看是否可以減小這個最長距離即可!值得注意的是必需要建一個消防站,因此可以在已經(jīng)建過的路口建!
Ferry Loading:
一看就知道是一道DP題目,開始的時候?qū)嵲诓恢涝趺醋觯髞韰⒖剂艘幌陆獯穑?br>state[i][j]表示前i個汽車能夠讓左邊長度為j的狀態(tài),那么state[i][j] = true if and on if state[i-1][j-len[k]]=true(0<=k<i) or state[i-1][j]=true;如果前i個汽車的總長度為s,甲板的總長度為Len,那么每個狀態(tài)要滿足 j<=Len,s-j<=Len;
實(shí)現(xiàn)的時候 可以用遞推的方法,那樣更簡單,一旦不能產(chǎn)生新的狀態(tài)就停止!且每個狀態(tài)記錄是由前哪個狀態(tài)變換過來的,輸出的時候可以遞歸輸出答案!
核心代碼(借鑒標(biāo)答):
void
print(
int
i,
int
j)
{
if
(i
==
0
)
return
;
print(i
-
1
,dp[i][j]);
printf((j
==
dp[i][j])
?
"
port\n
"
:
"
starboard\n
"
);
}
memset(dp,
-
1
,
sizeof
(dp));
dp[
0
][
0
]
=
0
;
for
(i
=
0
;i
<
n;i
++
)
{
bool
flag
=
false
;
for
(j
=
0
;j
<=
L;j
++
)
if
(dp[i][j]
>=
0
)
{
if
(j
+
len[i]
<=
L
&&
sum
-
len[i]
-
j
<=
L)
dp[i
+
1
][j
+
len[i]]
=
j,flag
=
true
;
if
(j
<=
L
&&
sum
-
j
<=
L)
dp[i
+
1
][j]
=
j,flag
=
true
;
}
if
(
!
flag)
break
;
}
Gas Station Numbers :
題目大意是給你 一個數(shù)字N,你可以交換他們每位的數(shù)字 比如 12.5 可以變成 15.2 也可以變成 2.15
你也可以把 2變成 5 ,5變成 2 ,也可以把 6變成 9 ,9 變成 6,對于由 N 所有變換而來的所有可能
,比N大的最小值是多少?
題目要找一個最小的 大于原數(shù)的值,顯然倒序(從低位考慮 )考慮更方便。
當(dāng)考慮到第 i (0<=i<len)位時,有幾個原則:
1 能在第 i 位上變化獲得答案,就絕不到第 i - 1 位上變動,盡量保持高位不變
2 若在第 i 位上有多種變化可能,選擇最小的值去替換第 i 位
3 如果在第 i 位上發(fā)生變化,則有可行解,如果一直倒推到第 0 位還不能替換,則無解
4 第 i 位替換好了的話, i+1位 到 len - 1位(即之后的數(shù))要求最小
所以在倒推的時候,可以開一個數(shù)組visit[10]記錄當(dāng)前可以用來替換的資源,時間復(fù)雜度只是用在排序上,為nlog(n)
只有注冊用戶
登錄
后才能發(fā)表評論。
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © hello_world
国产ww久久久久久久久久
|
欧美精品福利视频一区二区三区久久久精品
|
亚洲女久久久噜噜噜熟女
|
久久99精品久久只有精品
|
品成人欧美大片久久国产欧美
|
狠狠久久综合伊人不卡
|
亚洲精品国产美女久久久
|
久久青青草原国产精品免费
|
中文字幕精品无码久久久久久3D日动漫
|
亚洲va中文字幕无码久久
|
久久久久久久99精品免费观看
|
欧美亚洲国产精品久久久久
|
久久国产精品国产自线拍免费
|
亚洲精品无码久久久久AV麻豆
|
亚洲国产精品久久久久网站
|
久久精品国产色蜜蜜麻豆
|
久久99久久无码毛片一区二区
|
久久久久久人妻无码
|
亚洲中文字幕伊人久久无码
|
国产AV影片久久久久久
|
99久久99久久精品免费看蜜桃
|
亚洲国产小视频精品久久久三级
|
久久精品国产亚洲AV无码麻豆
|
亚洲国产一成久久精品国产成人综合
|
亚洲AV伊人久久青青草原
|
伊人久久综在合线亚洲2019
|
国产成人久久精品区一区二区
|
一本色道久久综合
|
久久亚洲av无码精品浪潮
|
99久久99久久精品国产
|
久久综合九色综合精品
|
91精品国产9l久久久久
|
色偷偷偷久久伊人大杳蕉
|
久久久亚洲AV波多野结衣
|
综合久久精品色
|
国产精品久久久久久久久软件
|
久久亚洲高清综合
|
性高湖久久久久久久久AAAAA
|
久久一区二区三区免费
|
中文字幕无码av激情不卡久久
|
精品伊人久久久
|