小李是希望小學六年級的學生,在一次數學課上,張老師出了一道題,小李很快就答出來了。這個題目是這樣的:給定乙個正整數 n,請求出 2 ~ n之間長度最長的、成等差數列的素數(質數)。例如:當 n 的值為 40 時,在 2 ~ 40 之間的全部素數有: 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 ,23 , 29 , 31 , 37 。其中公差(每兩個數之間的差)為 1的素數數列為 2,3 ,其長度(素數的個數)為 2 ; 公差為 2 的素數數列為 3,5,7 ,其長度為3 ; ⋯⋯用素數篩把所有的素數篩出來,然後列舉公差,如果滿足那麼可以繼續,否則記錄答案
*輕而一舉地就可以猜到遞推式,dp[n]=dp[n-1]+dp[n-2]2,然後發現資料太大,那麼多開一位寫高精
#include
using
namespace std;
int n;
inline
intread()
int dp[
150]
[1000];
inline
voidgj(
int i,
int j,
int k)
//高精
}int
main()
簡簡單單的dfs(**師)+剪枝
先是用二維矩陣字首和,算出從1,1開始到i,jblack的數目和white的數目然後列舉邊長和起點,算出black與white的差值,如果<=1,那麼可以記錄答案
#include
using
namespace std;
int ww,bb,n,m,ans;
int x,w[
350]
[350
],b[
350]
[350];
intmain()
for(
int k=
2;k<=
min(n,m)
;k++
)for
(int i=k;i<=n;i++
)for
(int j=k;j<=m;j++
)
cout<
return0;
}
暑期集訓2期3
直接列舉 3000到3000也沒關係。列舉最後的x,容易發現x 的取值不會在序列取值之外。不開long long 會掛掉30分。題目大意兩排數,你的目標是將數值相同的放到一起。滾動不消耗代價。提起消耗的代價為數值。你需要最小化提起的數值限制,也就是移動的最大值盡可能小 30分演算法 一旦乙個數值使用...
暑期集訓2期6
如果二叉樹的左右子樹的結構是對稱的,即兩棵子樹皆為空,或者皆不空,則稱該二叉樹是對稱的。程式設計判斷給定的二叉樹是否對稱。例 如下圖中的二叉樹t1是對稱的,t2是不對稱的。二叉樹用順序結構給出,若讀到 則為空,二叉樹t1 abcde,t2 abcd e,如果二叉樹是對稱的,輸出 yes 反之輸出 n...
暑期集訓2期4
把已經買過的遊戲給標記一下,然後從第一款遊戲開始買,如果還可以買並且沒有被標記過那麼買 include using namespace std long long n,ans,num,x struct node a 100010 inline intread while isdigit ch res...