- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564706 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174635
- 相册
- 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组决赛题解第二题3 [- n+ |, C$ k
0 n3 @; Z3 M: e5 e+ S6 Y6 M
求两两不同的素数组成2019的方案数
2 g" e! _/ ^- ?( U) f注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
9 T" ?9 f7 R5 { C. D结果: 559653654650601 s' Z1 _' A9 |. g5 G) U( b4 Y! d
代码:/ M6 o# Y, e' V3 n6 e8 \
#include<bits/stdc++.h>2 M1 A! ^3 y: O7 l6 T
#define mem(a,b) memset(a,b,sizeof(a))
( F) D4 Z$ L. L/ w6 L+ }using namespace std;& J5 @; r/ ]; J
typedef long long ll;0 b9 E, d1 P( h- k8 U2 I% _
const int inf = 0x3f3f3f3f;
2 O5 z' E4 v9 \+ N/ z6 _const int maxn = 3e5+55555;
6 m6 a+ _/ B/ I6 econst ll mod = 998244353;! K- O* i0 B2 b4 i" N
const double eps = 1e-7;
( j( M6 I( o$ B7 W
v# z# k0 Q, A# F" o. qbool vis[12345];6 A" ?9 g3 r3 X. c* ]5 G
vector<int>prime;
! d' e+ R, d; P2 w0 B8 |& T' {' Y7 Vll f[3000][3000];
6 x" r3 `* d6 y+ R/ r1 ~
3 c. `# H: Q# A/ \9 rvoid init() { //素数筛( d/ \. H2 ?7 j7 N
for(int i = 2;i<= 3000;i++) {
+ [: A' e- E% ?- A `1 h if(!vis) {
* w& Y" M; _$ `3 |1 r& b# H for(int j = i*i;j<= 3000;j+= i) {
8 c' q/ _2 F u3 S K2 s! z) R0 K vis[j] = true;4 ]* z G+ M" o) a9 ~! F
}' t }3 M" b, I& H- i% T6 G1 g
}" h- [! B" ?+ S2 h- B
}" W9 J9 Z+ g; W1 O+ d. m0 U
for(int i = 2;i<= 2019;i++) {
3 z. X! M7 i/ ^! S) p; l8 X if(!vis) prime.push_back(i);
: g" O8 ~! ]4 v: | }
- O; p @; D8 A) f3 g}
a7 B: y% t8 Z/ L' @
$ }1 t$ P4 M4 Tll dfs(int pos,int sum) {6 D0 E9 G0 Y8 Q; Y
if(f[pos][sum]!= -1) return f[pos][sum];7 q1 m. o" `6 d s% Z2 @' u
if(sum == 2019) return 1;
% v. Y. F9 P$ h& ~) \0 d if(pos>= prime.size()||sum> 2019) return 0;* U. P+ P+ v, g) \: f3 Z
( p" n# |% O; J7 w6 E
ll ans = 0;6 p, E, G( Y* Y6 C2 f* R1 R1 O
ans+= dfs(pos+1,sum);// 不要当前这个素数& D' k$ C8 M* A! q6 U( n
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数+ q/ `: P6 O, k1 M" a; q* A
return f[pos][sum] = ans;9 \0 [' P6 |, p9 \1 m5 p3 v% M
}
$ G! X0 L$ Z% J8 C. M2 k' h/ \- |1 L' Y) g1 |
int main() {9 M/ z4 ~8 y0 w
init();( E+ o9 z2 L4 I# G4 v
- s- W+ _2 c! I. ?/ A. r6 }, I
mem(f,-1);
* k9 i0 w0 z W( a ll ans = dfs(0,0);+ i/ h; Y+ B1 C' T7 d- }* U
cout<<ans<<endl;
5 n/ | D' b* G- g* R$ b# a# n0 g3 M A/ ^
return 0;
% p4 y. ]9 e, p}
/ ^ G" j8 M y6 u! }* v4 o--------------------- % C) Z, @" h$ z$ E$ F* U
作者:nka_kun % X- O6 T8 a6 K
& N- u; N% H5 o* b! \9 q
- ^7 i8 S$ V1 {% Z# c9 T J |
zan
|