- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564690 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174630
- 相册
- 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: a, C" T8 \+ s+ o
# L$ M! p0 w2 K& i, E0 Y& S求两两不同的素数组成2019的方案数
2 w' H8 L" X" N* N( u, Z( ? i注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
9 I& F9 c* L( J( W$ ^; @结果: 559653654650606 ~5 [, R* o j- _/ G, N
代码:
; B k; f$ O" m#include<bits/stdc++.h>" ], O* u; P! B& v& e
#define mem(a,b) memset(a,b,sizeof(a))/ a7 W4 T" x$ F
using namespace std;
; m; K( `3 h# e' m2 `- Utypedef long long ll;; \6 }5 g" A. `8 p
const int inf = 0x3f3f3f3f;
$ j @" d- U) T+ Z5 Y% kconst int maxn = 3e5+55555;
3 y; q0 D' Y7 U" h: Pconst ll mod = 998244353;
3 ]( I: S4 X+ w# Fconst double eps = 1e-7;
4 ?' ]1 u/ _* r' h: A1 d5 c7 M- k. l; K; \) |5 C# K" @$ ?7 J% U
bool vis[12345];2 T7 l+ E2 }( f+ [
vector<int>prime;3 t: ~% I( I2 }. z2 F# B- Q
ll f[3000][3000];
' @9 \& ^( O- C; c( @: o
" s3 I! c* Z" tvoid init() { //素数筛7 e9 w0 b0 t/ K# t! y
for(int i = 2;i<= 3000;i++) {7 i. d/ [8 ]( a" U9 W
if(!vis) {
" y3 n2 m0 Q9 _: I' u& I for(int j = i*i;j<= 3000;j+= i) {
+ \. T z3 f, e5 H/ k% n, a vis[j] = true;- P3 L$ f/ h2 a
}6 R. V% N# X7 d E# J6 _
}
8 j; c4 W% Q6 U9 z$ `/ h }
; J+ {5 H( e# B* G, b( Y% T$ I for(int i = 2;i<= 2019;i++) {
- z2 Q$ ?; o3 z& g if(!vis) prime.push_back(i);5 {( ]0 g7 S9 A$ ?
}
. G8 i* b2 ^! }. o4 L$ i' c# `& T1 D}
" F7 c7 X" K( H# k& c( w% A
- K% b: ?- e! y5 ]8 k5 _9 E' Zll dfs(int pos,int sum) { H! w1 V6 W }( ?) Q
if(f[pos][sum]!= -1) return f[pos][sum];% V- n+ t9 K2 l, [# Q) L+ C
if(sum == 2019) return 1;
! x" W& p5 Y- L% t if(pos>= prime.size()||sum> 2019) return 0;
7 i9 L+ \ B3 f5 I- }/ r. H4 P- J! e2 T* n/ Z- R) N0 K
ll ans = 0;0 E4 A9 U8 Y; _
ans+= dfs(pos+1,sum);// 不要当前这个素数) C, |5 h6 k) p
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数
) n5 u* l; o; T2 j! N return f[pos][sum] = ans;* V1 e/ j R" y4 L# D9 n
}$ a ~8 a; ], X/ R- m- I2 h
. S7 I% i9 g* N. b0 x& g
int main() {
6 C; G& o; ?% t! A& ^ init();+ z6 ]0 H+ h5 S) x O. S
. k; |; P: t' B mem(f,-1);4 M' t( {5 R( ~0 \0 w$ P
ll ans = dfs(0,0);5 V$ `$ q0 j* A
cout<<ans<<endl;# b# `: E" N+ j, E
" B7 e1 j0 C; [0 @! ~8 w0 S. W) v
return 0;
' \9 I& N, N' \- }0 R}
" B$ h% |- }0 f2 h( Q--------------------- $ J8 I2 o! w8 c5 v
作者:nka_kun
& T, `! ]2 n& t1 b; T9 K$ h4 y0 e# l9 W, G
' v- w# y. {% D3 w |
zan
|