P1311 選擇客棧

2022-08-18 22:24:13 字數 1098 閱讀 3619

嗯這道題我的做法是典型的用空間換時間

用a[i][j]記錄顏色為i的客棧出現的座標,每次列舉當前客棧到前乙個同顏色的客棧間是否有符合條件的客棧,如果有,就是當前客棧之前出現的所有同色客棧數量,如果沒有,就是上乙個同色客棧的答案數,最後從頭到尾遍歷一遍每個客棧的答案累加,輸出,結束

但是就在我寫這篇部落格的時候,我突然意識到,對於a陣列,當當前節點為j時,我最多只用到了同色的客棧數以及a[i][j-1],那不就可以優化一維只記錄上次同色客棧的答案數麼???????那不就不用用空間換時間了?????

md我真是個智障。。

附上我無腦開的不知道浪費了多少空間的**。。。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9

#define ll long long

10using

namespace

std;

11const ll oo=0x3f3f3f3f;12

const ll n=200005;13

const ll m=55;14

15ll n,k,p,sum;

16ll ans[n],a[m][n],b[n];

1718 ll min(ll a,ll b)

19 ll max(ll a,ll b)

20 ll abs(ll a)

2122 ll get

()29

while(zy>='

0'&&zy<='9'

)33return z*y;34}

3536

intmain()49}

50if(ok) ans[i]=a[c][0

];51

else ans[i]=ans[a[c][a[c][0

]]];52}

53 a[c][++a[c][0]]=i;54}

55for(ll i=1;i<=n;i++) sum+=ans[i];

56 printf("

%lld\n

",sum);

57return0;

58 }

P1311選擇客棧

這是2011年提高組d1t2,是乙個綠色的模擬題,不出所料,沒寫出 來。首先輸入n個客棧的顏色和最低消費,然後根據 同顏色但不是乙個客棧 以及 兩個客棧之間必須有乙個的最低消費 p 確定出最大的住宿方案數。然後我首先想到了暴力法 for 第乙個客棧 顯然2e5肯定超時 當然賽場上可以這麼暴力去寫 還...

P1311 選擇客棧

麗江河邊有n 家很有特色的客棧,客棧按照其位置順序從 1 到n 編號。每家客棧都按照某一種色調進行裝飾 總共 k 種,用整數 0 k 1 表示 且每家客棧都設有一家咖啡店,每家咖啡店均有各自的最低消費。兩位遊客一起去麗江旅遊,他們喜歡相同的色調,又想嘗試兩個不同的客棧,因此決定分別住在色調相同的兩家...

P1311 選擇客棧

麗江河邊有n 家很有特色的客棧,客棧按照其位置順序從 1 到n 編號。每家客棧都按照某一種色調進行裝飾 總共 k 種,用整數 0 k 1 表示 且每家客棧都設有一家咖啡店,每家咖啡店均有各自的最低消費。兩位遊客一起去麗江旅遊,他們喜歡相同的色調,又想嘗試兩個不同的客棧,因此決定分別住在色調相同的兩家...