- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 569175 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175975
- 相册
- 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组决赛题解第二题# c; \, B. h( }( t) q
* r6 w; z" z: Y
求两两不同的素数组成2019的方案数
5 S0 t6 ^2 X7 L( c/ j7 n: G* J' D注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
% \' z8 Q. C& ]结果: 559653654650606 E1 S0 @& p. f+ w( a/ k4 h
代码:0 p: S6 m, E6 J6 w4 {
#include<bits/stdc++.h>1 u9 y9 y% ?9 u. B6 t
#define mem(a,b) memset(a,b,sizeof(a))/ t3 @ g- j6 M' m# c) p
using namespace std;8 f5 g5 ~" G0 n( \
typedef long long ll;
) L. V4 O$ P3 _0 i( v1 @ uconst int inf = 0x3f3f3f3f;
' \; a- e: \0 U N; oconst int maxn = 3e5+55555;
" M+ E7 d; N7 k# v+ K1 e/ Vconst ll mod = 998244353;3 k( r3 r, G1 v! d
const double eps = 1e-7;
) d' s X5 M2 b
0 J5 ]$ Z$ ?0 f7 s( C' `bool vis[12345];
+ v# y7 V6 l/ f) `9 N2 bvector<int>prime;
4 z9 e. h+ Y! e( W, Oll f[3000][3000];
" k6 f1 W) M, ~- g$ J2 o" T! ]0 y! ^) V" n
void init() { //素数筛
Q! G! k1 _, k2 n) F for(int i = 2;i<= 3000;i++) {
9 H5 G0 x6 V* R" q if(!vis) {
1 n+ _$ D5 k) t6 I4 X, j for(int j = i*i;j<= 3000;j+= i) {1 A. |1 j+ i# |& C
vis[j] = true;5 J9 z$ J; e* `3 {0 e9 v4 k
}1 x* E% j% H3 g4 ]( i
}
" `5 Z ]- D* ~ L }
: A/ j N0 c- p' f+ ]# _4 Q for(int i = 2;i<= 2019;i++) {
3 U6 a& u) t( E- B if(!vis) prime.push_back(i);* R0 |$ c$ K' F0 ]- y
}! N! H% s) ~; A5 M
}
# Q' w0 N7 \/ I
0 a2 b1 E7 \. r7 A- P- qll dfs(int pos,int sum) {
$ C) o% G5 H z% e- s4 S8 T+ f if(f[pos][sum]!= -1) return f[pos][sum];
* x$ _6 Z& i+ T if(sum == 2019) return 1;: V/ `4 H% Y |9 h
if(pos>= prime.size()||sum> 2019) return 0;
0 d% p7 n; l& o. v) D; h; E" V- d/ a- t6 o# ?+ |! o
ll ans = 0;$ s3 B, G3 m( d4 E
ans+= dfs(pos+1,sum);// 不要当前这个素数
# r1 f* L! x6 J; u4 w% [$ N ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数* q5 t9 _2 X! Z5 a3 N1 \
return f[pos][sum] = ans;2 \8 F& I2 |) f
}: L4 {0 [& m: Q z
2 _+ Y8 O( V3 O/ D" r hint main() {
+ u: ^7 v0 z; h+ A) s, _ init();) l2 v7 `* \) r
0 K- d3 y N+ ~/ d. b6 f mem(f,-1);0 b/ `0 w8 y2 G8 U4 t
ll ans = dfs(0,0);2 C5 n" z6 Y, `7 \
cout<<ans<<endl;
9 K5 ~, Q `/ j$ Y0 t% H* [9 t2 A( }! b5 C# D
return 0;
" z4 N9 V; d) G7 d/ K}9 ]1 C) g0 K8 \; @/ v6 z
--------------------- 7 e7 \% P) k1 T6 C
作者:nka_kun ! E4 |4 M. E! R7 p2 P! U) P) `/ Z9 }
+ t4 W0 `3 ~) C' i1 i) B
2 g+ w; U/ A5 V; |' P4 O1 b
|
zan
|