貪心演算法模板題,規律是每次選擇結束時間最早的乙個活動。
#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...