題意:給出一些不同型別的貨幣和貨幣之間兌換的比例,求能否實現從一種硬幣開始到自身結束後,實現盈利
分析:1.一開始遇到這個題的時候,我首先想到的是dfs,在遍歷的過程中如果遇到環的話進行判斷,得出結果。但是這樣考慮是不正確的。比如:
a 1.0 b
b 1.0 c
b 5.0 d
c 0.1 d
d 1.0 a
dfs時,如果先搜abcda是不成功的,如果這時標記搜過的d為捨棄,則abda就搜不到了。
2.放棄dfs後,發現這裡的思路跟尋找負權迴路很相似,尋找負權迴路是因為在執行過程中可以不斷更新,而這裡如果存在盈利的話,也可以不斷更新。
使用bellman-ford,必須保證圖中每個點為起始點都沒有迴路。而使用spfa,只要看入佇列次數就行
**:bellman-ford
view code
1 #include 2 #include 3 #include 4spfa#define white 0
5#define black 1
6using
namespace
std;7//
192k 32ms 8//
bellman-ford910
const
int maxp=31;11
const
int maxe=1000;12
struct
edge
13edge[maxe];
1819 typedef struct
20pp;
25pp point[maxp];
26int
p,e;
27bool
flag;
2829
void bellman_ford(int
u)3049}
50if(!f)
51break;52
}53for(i=1;i<=p;i++)
54for(j=point[i].pre;j!=-1;j=edge[j].next)
55if(point[edge[j].v].valueedge[j].w)
5660 flag=true;61
}6263struct
mode
64mode[maxp];
6869
int find_point(char
str)
7076
77int
main()
7894
95 scanf("
%d",&e);
96int index=1;97
for(i=1;i<=e;i++)
98108
109 flag=true
;110
for(i=1;i<=p;i++)
111117
118119
if(!flag)
120 printf("
case %d: yes\n
",k);
121else
122 printf("
case %d: no\n
",k);
123}
124return0;
125}
126127
/*128
3129
usdollar
130britishpound
131frenchfranc
1323
133usdollar 0.5 britishpound
134britishpound 10.0 frenchfranc
135frenchfranc 0.21 usdollar
136137
3138
usdollar
139britishpound
140frenchfranc
1416
142usdollar 0.5 britishpound
143usdollar 4.9 frenchfranc
144britishpound 10.0 frenchfranc
145britishpound 1.99 usdollar
146frenchfranc 0.09 britishpound
147frenchfranc 0.19 usdollar
148149
0150
*/
view code
1 #include 2 #include 3 #include 4 #include 5這個題還可以用floyd做,因為沒有確定的源點,最終求出arrray[i][i],如果大於初始值1,則yes,否則no#define white 0
6#define black 1
7using
namespace
std;8//
204k 32ms910
const
int maxp=31;11
const
int maxe=1000;12
struct
edge
13edge[maxe];
1819 typedef struct
20pp;
25pp point[maxp];
26int
p,e;
27bool
flag;
28int
cnt[maxp];
2930
struct
mode
31mode[maxp];
3536
int find_point(char
str)
3743
44void spfa(int
u)4575}
76}77}
78}79}
8081
intmain()
8298
99 scanf("
%d",&e);
100int index=1
;101
for(i=1;i<=e;i++)
102112
113 flag=true
;114 spfa(1
);115
116if(!flag)
117 printf("
case %d: yes\n
",k);
118else
119 printf("
case %d: no\n
",k);
120}
121return0;
122}
123/*
1243
125usdollar
126britishpound
127frenchfranc
1283
129usdollar 0.5 britishpound
130britishpound 10.0 frenchfranc
131frenchfranc 0.21 usdollar
132133
3134
usdollar
135britishpound
136frenchfranc
1376
138usdollar 0.5 britishpound
139usdollar 4.9 frenchfranc
140britishpound 10.0 frenchfranc
141britishpound 1.99 usdollar
142frenchfranc 0.09 britishpound
143frenchfranc 0.19 usdollar
144145
0146
*/
tjuoj 1129
POJ 3259 SPFA判斷負權迴路
spfa 是bellman ford的一種優化 spfa 用於求負權存在的最短路,判斷是否有負權迴路,只需判斷鬆弛邊的次數,如果大於n,就說明存在負權迴路 include include include include include include define n 5501 using name...
poj2393(類似dp的區間貪心)
translation 奶牛們建了一家酸奶廠,在n週內每週需要出貨y i單位酸奶,第i周成本為c i,儲存費為每週y。求總體最低成本。solution 區間貪心 說是貪心,其實感覺有點類似dp,不過這二者本來就是一種則優策略的演算法,也就無所謂了。對於某一周,可以在當周生產新的酸奶,也可以從前幾周選...
棋盤問題 POJ 1321 類似(八皇后)
在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。input 輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,用乙個空格隔開,表示了將...