- 在线时间
- 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组决赛题解第二题' B8 N+ e* ^* g- l4 t
/ ~# y k# P" w+ W2 Q求两两不同的素数组成2019的方案数: a* p+ f; Y& H, y' v! G. B
注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
. q/ Z+ V/ }* f8 i结果: 559653654650604 p& h4 H* v1 m8 z7 Z0 Y% |9 m* K0 D
代码:1 K0 ~1 f. K/ u' ~4 A9 G* q/ Z5 `
#include<bits/stdc++.h>- H% C1 m6 k7 A/ j" q
#define mem(a,b) memset(a,b,sizeof(a))
`/ Q3 J% p+ Ausing namespace std;
5 K j# _) R4 U) d9 y. V# O' p: }typedef long long ll;, _. z8 }# u0 c0 j S3 f$ z
const int inf = 0x3f3f3f3f;7 s$ a/ b3 Y* m9 {( F) t: U+ h3 f3 W
const int maxn = 3e5+55555;
. H- a: z0 \1 f8 y) b( v; econst ll mod = 998244353;
8 A* N* A1 i( f7 ?+ d6 z- mconst double eps = 1e-7;
6 H1 a' x4 w4 z3 |7 |7 p; Z; g& ~4 ~! v9 C
bool vis[12345];
& v# K6 A9 X5 K* U+ q( k1 }( cvector<int>prime;
: ~# P! g# e2 Vll f[3000][3000];
5 m# l J3 d/ f) B1 h5 `% f% u
* t! B" Y3 u9 Q8 B k# j7 m" hvoid init() { //素数筛
0 }- W3 u# u, m: a9 v: V3 S for(int i = 2;i<= 3000;i++) {8 G$ h- F% ?$ t0 r9 c3 F
if(!vis) {1 w# p8 P; l5 f% z0 X/ L0 M2 `
for(int j = i*i;j<= 3000;j+= i) {
6 i* _3 o' S' q6 E vis[j] = true;* e8 F. M- \0 i- F2 r6 K& E
}
6 F& y) [* X: Y8 U S b6 b }- s' H# y6 Y+ k3 R4 O+ }# w
}, }: z$ L7 c" y
for(int i = 2;i<= 2019;i++) {
0 f- }3 c: L9 `7 m) y* t if(!vis) prime.push_back(i);0 r9 z7 e! i% n* H. }8 \
}" a! E+ {& k! q2 B( _. c7 o
}6 R& l+ a! ?$ N# M
+ H+ e3 v/ d; ]6 ?4 wll dfs(int pos,int sum) {
" X% v; c, c/ E. m8 ?" L5 P3 } if(f[pos][sum]!= -1) return f[pos][sum];+ g' w3 F" C. P9 v" \+ G
if(sum == 2019) return 1;0 M4 z4 r9 C( [5 x2 x6 V
if(pos>= prime.size()||sum> 2019) return 0;; ?$ M( T6 y7 v) r t
4 z( O$ f& h5 u' G: ?2 ~
ll ans = 0;; s" ~( B3 f6 g
ans+= dfs(pos+1,sum);// 不要当前这个素数
0 h2 Z0 }6 y8 ]/ x/ ?5 [) k' j ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数- X4 P0 D7 O2 Q; W( r* b
return f[pos][sum] = ans;
8 Z1 F7 v, H% p+ @}4 c6 S2 D/ I: ]) u- y. P
6 M, b9 I% W, E Mint main() {
& \% W# d+ t9 Z3 P& G6 ~ init();
% Q, ^& [. i* G% Q+ @' `
$ Q$ j0 D) h* q% \4 a$ x+ V4 ~+ } mem(f,-1);
2 p4 ^4 s+ K p! ~4 T6 n6 z ll ans = dfs(0,0);# N, x; _; o! n! v! }
cout<<ans<<endl;
1 [3 r* V8 t s( f8 R+ j& T2 j$ U2 [7 i! L y: b
return 0;
' i5 f4 H7 B! {6 w' }}
" ^, q6 D3 U3 D: Q$ w2 C; v: x* Q8 o---------------------
: E$ g1 t* C! N8 J$ B! d作者:nka_kun
% A5 k+ Z! V' A3 p" ]* V; S; N+ O, n. w- {9 z8 {
3 \, x- d Y: @ j1 g4 R7 y, V |
zan
|