- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563328 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174221
- 相册
- 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组决赛题解第二题0 i+ w2 \3 R7 N, K: M' {4 q5 N
. y4 R& W3 s1 K! i. }: i求两两不同的素数组成2019的方案数
. y# {4 O8 W* p1 X注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
0 t; O' q# L( u3 m# X% L& N8 f结果: 55965365465060' G5 m! T# b2 g
代码:( E3 N/ y @. p! b# J' z5 y, {( G
#include<bits/stdc++.h>+ Z( m# [# k4 u2 X2 K
#define mem(a,b) memset(a,b,sizeof(a))
% z& b: j1 d3 u3 B( Susing namespace std;
! _) i$ G9 h7 \typedef long long ll;" E. v2 y$ Q* b5 Y3 O' O
const int inf = 0x3f3f3f3f;4 A; S: T6 N& ^ g" W
const int maxn = 3e5+55555;) N" j; f, y# y5 z( p1 T
const ll mod = 998244353;4 r+ S+ ?5 L- {2 h$ d$ S. p
const double eps = 1e-7;
4 K' `( X$ m1 \9 M u& ]/ \
4 k1 F( X4 [: ?7 {" B% Y# C& Dbool vis[12345];
0 e6 Q7 u2 X6 r4 ~vector<int>prime;
, X8 r8 @& u/ ]# }ll f[3000][3000];
, u5 x' `) [, l9 K
6 e3 b6 ~+ v7 U4 l+ d3 |; Zvoid init() { //素数筛
1 \/ l! z6 m- K# ] for(int i = 2;i<= 3000;i++) {. v# M7 s/ N+ z% S4 U7 H8 P* M
if(!vis) {: j" s# R! g. J. |/ ]7 T
for(int j = i*i;j<= 3000;j+= i) {
8 r0 A+ N4 `2 T- W vis[j] = true;9 w9 D! |' B9 T
}
/ R2 ~8 |2 h% D: E2 R j: l }
9 f8 k2 b1 s6 X% j' T }, l) P- p: A3 z
for(int i = 2;i<= 2019;i++) {
+ W& o# J! s# C if(!vis) prime.push_back(i);
, K" Y' A9 H; G( N( a8 ? }1 |* w0 r3 ~# m; J9 f( `
}+ _3 `% g# I2 _7 B4 Q5 O- `* _
" B7 l6 j+ N! q; W' k) jll dfs(int pos,int sum) {& n% S, s5 ?! W& u8 L y+ w4 n
if(f[pos][sum]!= -1) return f[pos][sum];
/ h% y) E" g; W. a+ m if(sum == 2019) return 1;
; |# _( m, ~: @7 g' i; `) ~$ d% C if(pos>= prime.size()||sum> 2019) return 0;
, @* x% s7 Y% N! V, E+ C) r: D1 y. G( x! u0 h8 x" _5 Z
ll ans = 0;$ f+ C3 R7 t) q w# {6 ]
ans+= dfs(pos+1,sum);// 不要当前这个素数7 ~) w* Q0 [" l2 y
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数* M; L8 }) o# i$ g+ k$ F
return f[pos][sum] = ans;
2 D; _4 v! f/ l}
3 K+ X( t: C' L* e {3 p" F- a1 V' ^2 {
int main() {
- N; Y) |. B6 Q. k) ] init();
" H0 [4 B. n4 V4 w# }( E! B! [3 [' p/ P% D! l$ L# P& h, @
mem(f,-1);
) @# b5 J2 j& W T' } ll ans = dfs(0,0);
- S, M8 z$ ?* |$ C) l. i) o cout<<ans<<endl; @6 i% ?, _/ j5 _$ d9 B) @! P
% c& t5 O R* J' {) ] return 0;3 }- }# |- h1 ^1 X3 k4 I% ^3 S
}! B9 b' \3 F6 Y" B" ^! q
--------------------- # ?# @5 D6 O& o; C% g! t1 F2 q/ Z
作者:nka_kun 8 V# \, W; m, k( C' S' p
2 }7 L d; k* P* I
/ i+ ^ z3 C- s0 g* r |
zan
|