演算法比賽1 0(題解)

2021-09-01 06:06:40 字數 1976 閱讀 3459

貪心演算法模板題,規律是每次選擇結束時間最早的乙個活動。

#include

#include

#include

using

namespace std;

intmain()

,q,ans=0;

//陣列s和e分別儲存每個活動的開始時間和結束時間,book用來標記活動是否還可以被選擇,q儲存最晚的結束時間,ans儲存已選擇幾個活動。

for(

int i=

0;i)int a=0;

//儲存已選擇的活動中最晚的結束時間

while

(a(j==0)

//找不到了就跳出迴圈

break

; ans++

;for

(int i=

0;i)//標記所有不能選擇的活動

if(book[i]==0

&&s[i]

book[i]=1

; a=ed;

//更新最晚時間

} cout

return0;

}

簡單遞迴(找規律 ),跟下面養奶牛的乙個思路。

首先直接暴力是不行的,還是需要找規律。

寫出1-n的二進位制數之後會發現每次二進位制多一位時,後面的數中1的個數就會是從0開始的數中1的個數加一。

| 數字 | 二進位制 | 1的個數 |

0 0 0

1 1 1

–此時二進位制位數多了一位–

2 10 1 =數字0中1的個數加一

3 11 2 =數字1中1的個數加一

–此時二進位制位數多了一位–

4 100 1 =數字0中1的個數加一

5 101 2 =數字1中1的個數加一

6 110 2 =數字2中1的個數加一

7 111 3 =數字3中1的個數加一

以此類推

規律找到了**就好寫了

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

int s[

20000010

],d[

20000010];

intmain()

s[i]=1

+s[i-

(k/2)]

; d[i]

=m-s[i]

;//0的個數是此時的位數減去計算出的1的個數

if(s[i]

>d[i]

) a++

;else

b++;}

cout<" "

}

#include

#include

#include

#include

#include

using

namespace std;

intmain()

if(n==sum)

cout<<

"true"

;else

cout<<

"false"

;return0;

}

找規律 今年的奶牛數是去年的奶牛數加四年前的奶牛數

遞迴會超時,用陣列做。

#include

#include

#include

#include

#include

using

namespace std;

intmain()

cout<;return0;

}

12 7 比賽題解

這個題的意思就是對於給定的數x,找到兩個數a,b滿足以下條件 可以看出a,b是不唯一的,所以這道題是spj,那我們只要找到最好找的就好了。a b 最大的時候,就是a b x對吧,正好這時候也滿足題目中的其它要求。如果x x 都不滿足大於 x 這個條件的話,肯定就無解了,所以我們只需要判斷這個條件就好...

題解 騎車比賽

描述 小信準備去參加騎車比賽,比賽在 n 個城市間進行,編號從 1 到 n。選手們都從城市 1 出發,終點在城市 n。已知城市間有 m 條道路,每條道路連線兩個城市,注意道路是雙向的。現在小信知道了他經過每條道路需要花費的時間,他想請你幫他計算一下,他這次比賽最少需要花多少時間完成。輸入第一行輸入兩...

vjudge比賽題解

題目位址 這道題本身不難,難在題目要求的格式上,所以新手多數會卡著格式不過關而不能ac。空白行就是在endl後還要endl一次,而且要在最後一次輸出中不輸出空白行就行了。至於大數加法可以參考這份部落格 大數專題 include include include include using namesp...