- 在线时间
- 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组决赛题解第二题: _$ ~& g, P" z, I. \, a+ j6 V; ]
6 ^1 w+ [: |% e0 I* |求两两不同的素数组成2019的方案数
# a$ E3 f" c+ G% Z; X1 ]9 r5 X注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long/ O+ g* G9 I' A* w$ ], g
结果: 55965365465060
+ |( ]6 o) [( c) T; |/ G" [1 C代码:
+ u, D5 ~# j9 m2 U, K; R2 K#include<bits/stdc++.h>9 I: z4 f* x6 k$ S( V# t, q
#define mem(a,b) memset(a,b,sizeof(a))
- w b% a1 x1 R' xusing namespace std;
% N7 G1 k, c- b$ {: \1 @typedef long long ll;
/ g2 C$ U v* p0 l; E* } N$ C( Pconst int inf = 0x3f3f3f3f;
% b1 x- R1 f3 I% lconst int maxn = 3e5+55555;! z" _$ x6 S5 q. K' @2 z
const ll mod = 998244353;5 R* |6 I7 {+ G+ r
const double eps = 1e-7;
! Y% \: P; I! |/ v/ Y. N
/ _; d0 j/ z+ u( E5 {& Qbool vis[12345];7 {' e& g9 _: J6 v+ {! p
vector<int>prime;1 w8 b# O. S8 Q' i
ll f[3000][3000];
6 ~" U9 C: D) J8 T8 }7 f8 E- j, H( ^1 v
void init() { //素数筛
3 V8 Q% o1 K! H' x( W6 F for(int i = 2;i<= 3000;i++) {
- m# k8 g' z0 X6 B2 R& \. f if(!vis) {
5 K7 I& C7 C4 E0 S for(int j = i*i;j<= 3000;j+= i) {
8 q! W) @" \1 f' S8 B' F vis[j] = true;
+ ^( O6 a$ O4 @& c } `5 A( I: l' r/ ]4 n0 L+ b
}! K1 \1 M9 V" `4 | c$ y6 F$ H
}
U3 o+ w6 Q7 g3 \ for(int i = 2;i<= 2019;i++) {
6 y. O) F& S5 Q" e% J; j6 W$ m8 T if(!vis) prime.push_back(i);
; F+ a; O9 i- Z( M$ h8 y }
. S) A/ B6 u) ~( I! m" r$ Z; X}
- d0 e( m. O' f: ?
) `' p% ]/ n5 X1 pll dfs(int pos,int sum) {' T" n5 Y6 ~) G. P9 g
if(f[pos][sum]!= -1) return f[pos][sum];
+ P1 ~/ E; Y+ {- v if(sum == 2019) return 1;
- b9 o8 s. S+ f/ k- S if(pos>= prime.size()||sum> 2019) return 0;! P, o( m. W7 s& M8 P9 A
- O' L% O* K* F ^: @6 [ ll ans = 0;* @, ` a( \4 s4 B/ P
ans+= dfs(pos+1,sum);// 不要当前这个素数6 h- p/ ^, M# n" K* Y! R: B# R" O
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数4 C' Y& r9 I b9 `
return f[pos][sum] = ans;0 o5 Y* A- ?8 ^- q8 S2 r
}& `' m- r4 c2 I Z: [+ y, t- c
5 B; z* d+ @7 W B
int main() {
2 \4 l- S/ Y- N% m7 x. R2 S4 F0 y init();6 G6 N/ G0 X A$ T9 m- @) I: I1 r" f
( Z ] @9 K- [! y# X
mem(f,-1);
u9 B+ K9 G0 O) h) C: E ll ans = dfs(0,0);% ~9 @: ?% k: q. Y
cout<<ans<<endl;
& D& }" @ u# B/ b% F. f' X [) V$ J9 L4 _' J" N4 v
return 0;
; \) t/ ?* j4 ?/ _0 a/ |" H# e}$ O) d& T3 e0 l1 B! B
--------------------- I# a3 B: \& w% d. ?, V/ J' X
作者:nka_kun * c! H# M3 u" o6 h0 x$ `0 ?
8 K0 R# g" u; @8 f& B/ W i/ w
) P$ j9 X7 m8 K1 v- T- _. M t |
zan
|