賽場上,得了18分,剛才提交,一次過了。比賽的時候還是想的不仔細。
乙個旅遊景點,如果被帶火了的話,就被稱為「網紅點」。大家來網紅點遊玩,俗稱「打卡」。在各個網紅點打卡的快(省)樂(錢)方法稱為「攻略」。你的任務就是從一大堆攻略中,找出那個能在每個網紅點打卡僅一次、並且路上花費最少的攻略。
首先第一行給出兩個正整數:網紅點的個數 n(1nv1 v2 ⋯ v**n
其中 n(≤200) 是攻略中的網紅點數,v**i 是路徑上的網紅點編號。這裡假設你從家裡出發,從 v1 開始打卡,最後從 v**n 回家。
在第一行輸出滿足要求的攻略的個數。
在第二行中,首先輸出那個能在每個網紅點打卡僅一次、並且路上花費最少的攻略的序號(從 1 開始),然後輸出這個攻略的總路費,其間以乙個空格分隔。如果這樣的攻略不唯一,則輸出序號最小的那個。
題目保證至少存在乙個有效攻略,並且總路費不超過 109。
6 13
0 5 2
6 2 2
6 0 1
3 4 2
1 5 2
2 5 1
3 1 1
4 1 2
1 6 1
6 3 2
1 2 1
4 5 3
2 0 2
76 5 1 4 3 6 2
6 5 2 1 6 3 4
8 6 2 1 6 3 4 5 2
3 2 1 5
6 6 1 3 4 5 2
7 6 2 1 3 4 5 2
6 5 2 1 4 3 6
3
5 11
第 2、3、4、6 條都不滿足攻略的基本要求,即不能做到從家裡出發,在每個網紅點打卡僅一次,且能回到家裡。所以滿足條件的攻略有 3 條。
第 1 條攻略的總路費是:(0->5) 2 + (5->1) 2 + (1->4) 2 + (4->3) 2 + (3->6) 2 + (6->2) 2 + (2->0) 2 = 14;
第 5 條攻略的總路費同理可算得:1 + 1 + 1 + 2 + 3 + 1 + 2 = 11,是一條更省錢的攻略;
第 7 條攻略的總路費同理可算得:2 + 1 + 1 + 2 + 2 + 2 + 1 = 11,與第 5 條花費相同,但序號較大,所以不輸出。
簡單是迴路問題,在做的時候要直接獲取兩點間的權值,並且n才200,直接上鄰接矩陣。
#include
#include
#include
#include
using
namespace std;
intmain()
;memset
(v,-1,
sizeof
(v))
;while
(m--
)int k;
cin >> k;
// 存放三個答案
int cnt_ans =0;
int min_ans =
1e5;
int sum_ans =
1e9+10;
for(
int j =
1; j <= k; j++);
while
(m--
)int f =0;
for(
int i =
1; i <= n; i++)}
// 開頭和結尾都加上0
rode.
push_back(0
);if(f)
int sum =0;
for(
int i =
1; i < rode.
size()
; i++
)else}if
(f)continue
; cnt_ans++;if
(sum < sum_ans)
} cout << cnt_ans << endl;
cout << min_ans <<
" "<< sum_ans;
return0;
}
L2 4 網紅點打卡攻略 25分
l2 4 網紅點打卡攻略 25分 乙個旅遊景點,如果被帶火了的話,就被稱為 網紅點 大家來網紅點遊玩,俗稱 打卡 在各個網紅點打卡的快 省 樂 錢 方法稱為 攻略 你的任務就是從一大堆攻略中,找出那個能在每個網紅點打卡僅一次 並且路上花費最少的攻略。首先第一行給出兩個正整數 網紅點的個數 n 1nv...
L2 036 網紅點打卡攻略 25 分
乙個旅遊景點,如果被帶火了的話,就被稱為 網紅點 大家來網紅點遊玩,俗稱 打卡 在各個網紅點打卡的快 省 樂 錢 方法稱為 攻略 你的任務就是從一大堆攻略中,找出那個能在每個網紅點打卡僅一次 並且路上花費最少的攻略。輸入格式 首先第一行給出兩個正整數 網紅點的個數 n 1再下一行給出乙個正整數 k,...
L2 4 鍊錶去重
l2 4 鍊錶去重 25 分 給定乙個帶整數鍵值的鍊錶 l,你需要把其中絕對值重複的鍵值結點刪掉。即對每個鍵值 k,只有第乙個絕對值等於 k 的結點被保留。同時,所有被刪除的結點須被儲存在另乙個鍊錶上。例如給定 l 為 21 15 15 7 15,你需要輸出去重後的鍊錶 21 15 7,還有被刪除的...