- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 569176 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 175976
- 相册
- 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组决赛题解第二题
$ F) e! N+ R/ _& F# L5 `4 S
. N) \' v' e- Y1 I求两两不同的素数组成2019的方案数, z' Y0 b# l, n( B9 R
注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
) Z! }# }2 ?$ q' T7 Q结果: 55965365465060
- w$ B, `6 j( O* ?7 P代码:
7 r- D2 n) b4 b# O6 E#include<bits/stdc++.h>
# X! v9 s5 t8 O& q6 f#define mem(a,b) memset(a,b,sizeof(a))
0 W! E2 ~7 k4 musing namespace std;
( b9 S' z2 D/ n% F/ ~) ttypedef long long ll;
; i n- X. h G0 M7 b7 Jconst int inf = 0x3f3f3f3f;
; f* S/ j( F7 r- Q+ a% A) lconst int maxn = 3e5+55555;
6 c& o2 Q; J# v; w! _" Zconst ll mod = 998244353;
0 f( u; X }* W$ ?0 |2 Lconst double eps = 1e-7;
& V" G3 @" P. M, e- O# f# v: J1 n5 w) H& e& c
bool vis[12345];
6 w5 l3 M1 K; S, J, U! vvector<int>prime;. Y7 |+ j( u/ n/ Q# z# X9 B
ll f[3000][3000];
* o8 ]7 F& v3 \: y3 y: M( f' Y7 m
void init() { //素数筛
- \4 P9 r" w1 ^6 l3 U for(int i = 2;i<= 3000;i++) {# B8 z! z {4 h6 d
if(!vis) {% T2 A- n/ w( D1 D8 _
for(int j = i*i;j<= 3000;j+= i) {- n8 {8 q! \% D9 N7 i* p7 g4 F
vis[j] = true;
$ T0 S1 ]& l$ B& x* E8 _ g }' O4 t+ F$ W/ l; P/ w: [" H
}
# Z9 e% Q/ s) A }
0 T. A' T, K! X+ b0 J3 B for(int i = 2;i<= 2019;i++) {1 Z' J2 u+ R. [' A
if(!vis) prime.push_back(i);4 [0 |. [) v E" s _8 z, z, |% x
}8 Z; d5 p) r0 l
}( X* _7 r$ k/ I. U5 z% D+ X
% J/ ]1 B7 N \# v4 f rll dfs(int pos,int sum) {
! d# [+ S! n* q- A if(f[pos][sum]!= -1) return f[pos][sum];
3 ]2 O) c8 v; P& N D- m1 {8 b if(sum == 2019) return 1;4 w+ H6 K/ y6 x0 B* A6 O+ l
if(pos>= prime.size()||sum> 2019) return 0;
* _7 ?, _% i) ^
$ W& i6 R4 I( J) T/ l9 v! N ll ans = 0;8 U2 V0 ^' C5 V
ans+= dfs(pos+1,sum);// 不要当前这个素数
% R- B4 F7 y# _- |6 d ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数6 [5 K& K3 ]( h& m5 Y
return f[pos][sum] = ans;
! o/ y9 ]" c4 X. y5 M}
! n0 @6 d( f3 I+ L) f) S) P& S( D& `- j7 ?. h* x/ L2 e0 o% R
int main() {; F$ o' ~1 e! y: ?
init();
* X; _6 V6 Z' V6 o8 B% Y$ _0 y6 P* Q& D( @+ }
mem(f,-1);
) i; i& c5 e1 t1 a" F ll ans = dfs(0,0);2 f$ x6 T8 z- b6 I
cout<<ans<<endl;
* f. ?2 y# z* J4 b/ b1 F& W$ W' ~: c4 A- ^; z5 V" v9 g
return 0;
) d6 D9 b2 l3 h- L0 N}9 D8 e. P4 m7 U9 \5 ]
--------------------- 4 Y# H) v, f- i3 q
作者:nka_kun
6 \+ W2 G% J6 }/ V8 x
( h' l9 |- M5 |% p$ D! l6 v. _" d. p. @$ b/ q/ g$ r
|
zan
|