- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565645 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174916
- 相册
- 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组决赛题解第二题
* y8 O1 @3 x; f4 b* L3 A
9 N. g' N( g' O1 |求两两不同的素数组成2019的方案数
* D* U# B& _4 c) N5 h% ~注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long9 m: Z6 e& V$ v; l8 }
结果: 55965365465060
$ u+ ]) Y: q* J5 h代码:
& j* u; h! a9 z3 b#include<bits/stdc++.h>
: p \5 }5 \& ]#define mem(a,b) memset(a,b,sizeof(a))- _0 o* T2 @9 O0 m2 Y
using namespace std;
6 G8 R6 B" X* p: ]2 Etypedef long long ll;, w; @! D& ?6 _8 G1 d0 H+ c/ m! ]' w
const int inf = 0x3f3f3f3f;
2 d$ l, ~% i+ G" c: U2 T) J1 Pconst int maxn = 3e5+55555;- t/ W' q$ A% t; f& G4 |
const ll mod = 998244353;5 v, [% r# ~5 ~; N, q
const double eps = 1e-7;( T2 k6 ]4 W" p2 R( ~1 ~
, b9 W) M ]+ H2 L9 m' T: f( o. hbool vis[12345];- h, J5 |0 M6 v
vector<int>prime;& l6 h5 k; _6 G# W- `1 M% {$ o& x6 N
ll f[3000][3000];: }* `; b% ?! ^8 t
f9 N' d" x. R. g k
void init() { //素数筛
6 q4 l" i9 x1 K6 g( b7 Y for(int i = 2;i<= 3000;i++) {
, H0 p$ N* n; F h0 m+ s5 j if(!vis) {) W4 N: ]7 @; z' x3 \7 u" l7 W* j
for(int j = i*i;j<= 3000;j+= i) {
/ L* G4 }. b6 L vis[j] = true;
7 E e9 H1 F$ X, c }: U6 P) R4 p# X7 H1 L$ p
}
! ^5 W- N: L' o l# }1 p }! S4 I/ t# a3 e8 L& X: [+ H
for(int i = 2;i<= 2019;i++) {; E1 l* @/ z2 J! W3 u9 o
if(!vis) prime.push_back(i);
7 Q \/ Z# P1 g p3 B } B0 B5 h5 h2 C: z
}
6 h! |2 j$ l9 v9 y1 B( f+ u, `7 ^: c) d
ll dfs(int pos,int sum) {
" L6 J. l# N$ w* I B if(f[pos][sum]!= -1) return f[pos][sum];
m+ {3 N; a2 h if(sum == 2019) return 1; h& d" Q5 k7 A |" E0 |. N
if(pos>= prime.size()||sum> 2019) return 0;
) z: k; U* G! ?" ]' X
: b( `+ t; T/ b: I! g$ v( I% T- W2 O" S ll ans = 0;
; \1 e0 i3 F; L+ |& H t7 Y! {, G" Y" y ans+= dfs(pos+1,sum);// 不要当前这个素数5 W# z S7 a. w: D
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数" \# w ]. B, X( r$ ?
return f[pos][sum] = ans;: m3 {$ C7 t z* l
}+ o8 s6 S2 [/ W& r" g
4 G4 ~$ ^! m6 r1 a6 oint main() { |* ~9 B6 e6 L: l
init();
' M; x: e' f' m1 J6 a8 q) S( C G& }( P
mem(f,-1);
( o* b! T( I2 G# d6 O6 V- y+ V ll ans = dfs(0,0);' K& I/ P' X+ {3 ?, g; ^8 E0 d
cout<<ans<<endl;
8 z, m' p S; w/ p8 [
$ H* Z! ^, p4 N4 V return 0;
* f) M% w! c* \' d+ X0 z}( Z" |. u/ ~+ v" D) g8 Q& N+ v7 d
--------------------- : Z: W% l: ^% u' d
作者:nka_kun 0 O) m$ _7 f `1 |8 m9 M& x5 K* M
^3 W. L3 L. f8 `
. _7 Q, w( A5 l! P; k9 Q Y1 V
|
zan
|