- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565678 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174926
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
2019第十届蓝桥杯B组决赛题解第二题0 H0 X! a! t! M0 @
. O& `5 S3 y# k# r5 Z* D$ _求两两不同的素数组成2019的方案数7 G8 H$ v, H: ~4 H4 Q6 b7 c: h
注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
& }- N- C" o! J+ e3 H$ H0 }结果: 55965365465060
- `0 ^. w" }/ C( i代码: C: D' P `" t5 w5 }
#include<bits/stdc++.h>
+ R4 P. v' C+ s6 P#define mem(a,b) memset(a,b,sizeof(a))
% r: l# W5 |* \# eusing namespace std;) T0 i% {( z9 \8 s
typedef long long ll;" @% w8 ?5 V: s: d
const int inf = 0x3f3f3f3f;4 }) v! [6 n. X: n& L
const int maxn = 3e5+55555;
6 e, B% p+ {$ r8 Tconst ll mod = 998244353;
/ m9 @1 t8 T* c0 pconst double eps = 1e-7;' q |3 k) d/ j7 h" R
7 i D7 [( _( Q; S' lbool vis[12345];
) e- u" \% ]; H% A3 Uvector<int>prime;! W2 H" ]& l' X" q
ll f[3000][3000];
! j$ R5 {& T4 G; Q) k
% D v+ G8 w- ^' q0 \. |! m& H; Nvoid init() { //素数筛/ s/ ^. R% f) b. u9 }4 [6 c w
for(int i = 2;i<= 3000;i++) {. C( G; N) J$ v& A: z% F5 y
if(!vis) {; r7 u$ a6 Z# q3 ?
for(int j = i*i;j<= 3000;j+= i) {' I) x' _# h. w7 s- O
vis[j] = true;; u$ ^/ [4 Q4 J3 e: h
}' p6 G) n" f; S/ x' P: y
}
+ R. `3 ?. U! D$ z }- M; d& j9 \7 w3 p
for(int i = 2;i<= 2019;i++) {
0 N: v# O H2 Q. v8 V e) ] if(!vis) prime.push_back(i);
+ c0 @8 N* }, h }
6 K; D/ [2 y5 g; A' _3 ^5 D' w; u}
+ O% P' I( d# g/ |& b O$ v4 \/ R) E4 j- R$ [8 b3 o
ll dfs(int pos,int sum) {2 Y, q3 h2 I# Q3 ~- h" \
if(f[pos][sum]!= -1) return f[pos][sum];" F5 T$ e9 a+ u+ b/ Y
if(sum == 2019) return 1;& K! |* _" S1 R+ p. c. k) O
if(pos>= prime.size()||sum> 2019) return 0;5 {0 X- P; l R; s8 x0 M: y) T( j" L
I! q$ n2 y) ^4 h ll ans = 0;- x1 C! d- M" ?) A; I+ S* h
ans+= dfs(pos+1,sum);// 不要当前这个素数# n+ ~/ o" j# J
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数
" R9 A4 i- g7 x* o: J |2 e0 O return f[pos][sum] = ans;7 R6 M1 b, v/ E4 J6 F) y0 I
}
! ?4 I% f! ?( A
d% ~( F: U+ E5 xint main() {; {: \3 @2 B/ X) g2 g
init();
. Q& m l- _. s- I! L+ [
! ^2 z' ]* M- ~2 o$ m( _( F mem(f,-1);
, P+ q2 M2 m: s& ?# B# b ll ans = dfs(0,0);
1 m5 {( ~7 N) q& F7 ?; P1 ^ cout<<ans<<endl;
9 Y) ^8 Y9 a: \4 ~: g
9 X* l* x; I" c1 B$ I" [ return 0;5 J2 ]# S7 ]0 W6 [% n
}
5 N! x0 L) Z8 s' L- |--------------------- # Q2 g! L; k+ Q5 W
作者:nka_kun 7 ?/ I, X$ s8 E) `6 h8 G+ Y4 a
) u0 J& C7 d! ^
4 D( _' k/ L8 a# i0 e) G W |
zan
|