- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563339 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174225
- 相册
- 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组决赛题解第二题
- Y2 M7 _- b. y2 K) k/ n4 Z/ |% S1 c+ y [
求两两不同的素数组成2019的方案数6 Z5 E2 G( Y. s6 m9 Y
注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long0 H6 ]( ~5 O; i0 ^; t* n
结果: 55965365465060
3 ?( F2 `% I- X% P, J7 }! Y代码:
& V% M t V {0 H* C4 P5 U( T#include<bits/stdc++.h>
3 |9 y1 ]' W0 M$ X/ k' @#define mem(a,b) memset(a,b,sizeof(a))
5 H% L: P' H0 k9 u/ q7 R+ s5 I0 F. Ausing namespace std;6 |9 q) S, Z! r4 Y' c0 F
typedef long long ll;
9 k" |7 r9 R- [- r6 Xconst int inf = 0x3f3f3f3f;
. v8 P( H0 I6 ?! Sconst int maxn = 3e5+55555;! A0 _4 ]. l x
const ll mod = 998244353;6 ^9 g4 ~0 h4 y: V/ H, E" g _5 T
const double eps = 1e-7;1 }+ n4 P/ ]' |: f9 Y
0 v' x/ g- U# u$ S o$ qbool vis[12345];
) O3 n! c' O; r: Zvector<int>prime;
1 Z) M6 B3 T: E; N( Mll f[3000][3000];' v* E5 h% n+ I, X1 r T
3 E9 R, c2 q" V- N3 J: x" m
void init() { //素数筛1 N `2 W* W1 W+ A8 R
for(int i = 2;i<= 3000;i++) {3 M F6 j$ E5 j u2 [
if(!vis) {* _0 w w1 q9 G3 r9 M0 b! U+ l* K q
for(int j = i*i;j<= 3000;j+= i) {' q3 _; e+ ]3 ]. V- q3 s$ h
vis[j] = true;. J- Q* F/ B9 D( {
}( A8 L8 `4 W4 Y& S. q
}
* u: h- |* b a! Q: M/ G. a }
- Y; p( C$ F# ~6 _! r: ]! d for(int i = 2;i<= 2019;i++) {# |; |1 Y6 N: a
if(!vis) prime.push_back(i);
/ P; O, n/ m. J* G7 u4 G* m! P }1 d9 x9 \" F" o! ?' _- c
}
% w5 Z+ r( q9 g* m6 z+ s3 }0 b3 ^: Y
2 n- a' d& c" tll dfs(int pos,int sum) {- Z7 Z: i, C3 [! Q' \' V+ o
if(f[pos][sum]!= -1) return f[pos][sum];0 o. e' ~% X: J3 U
if(sum == 2019) return 1;
! R ~- K4 c! s* \& } if(pos>= prime.size()||sum> 2019) return 0;& N f. K. p2 t+ z
# q6 v: s. h5 Z& w4 H
ll ans = 0;
# N4 p, W# [0 ^2 X2 z0 \' [ ans+= dfs(pos+1,sum);// 不要当前这个素数* {( \: Z3 _: l& C' n5 U6 N
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数
/ U. f* Y5 t4 H& T return f[pos][sum] = ans;
$ v. ^3 b+ B9 x3 K* ?- S: J$ G; B$ N& W}: z6 h' D0 \0 D
8 A; V) m2 e& l) X3 x7 K T6 }+ kint main() {
@2 k/ s5 }4 h6 N# k init();4 Q5 Z4 C( n6 R" a2 p# O F, `
9 k# T; w$ l0 Z z# {
mem(f,-1);
, @* H* G; a2 r/ f7 W( m1 ~ ll ans = dfs(0,0);5 Y; A3 w* I3 m0 k
cout<<ans<<endl;! u, j7 b |: O
/ x4 B3 d+ Z4 T+ f' g* L- g/ g- s return 0;
( E* W, X# w6 D, c}
F# y6 Z+ e! ~& R/ r( w. x--------------------- 8 O$ R" |3 o7 w( a, G5 m
作者:nka_kun 0 N; Z1 n3 w: h
# t; u% k! C$ u2 c: Y) S3 s( y4 Y$ i
) [) G( e- l( ?' m" L O% x6 [ |
zan
|