- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565745 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174946
- 相册
- 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组决赛题解第二题+ `' e4 i( W1 _# ?; C
( @4 C3 o! V; u7 f求两两不同的素数组成2019的方案数
2 E. A3 Y6 U2 a8 _1 B* v注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long8 }0 _+ e7 n. h6 \6 `
结果: 559653654650604 l) `6 p% A, C% N
代码:" H8 `% E* c6 {: N
#include<bits/stdc++.h>% |8 I' r) Q8 p. m
#define mem(a,b) memset(a,b,sizeof(a))8 S* B8 T0 |1 W9 v) K2 G) k
using namespace std;7 W# u' d' ?6 T+ o( l, X7 _
typedef long long ll;
8 I: C6 e5 m+ X: F7 A" [9 Oconst int inf = 0x3f3f3f3f;
! w3 t8 H( u( _0 @. Y' x, i# o' S8 ^const int maxn = 3e5+55555;
* E7 D; |0 R- ~const ll mod = 998244353;! A. o( j7 G5 S* e# O7 I d& r: b) ^, H5 j
const double eps = 1e-7;6 i+ N% X+ ~- A( A9 x2 L8 P' _
2 u& ?$ G, Z+ d ]2 x* xbool vis[12345];* @% [; V1 q2 y# Z. v9 n
vector<int>prime;
9 [* a; s+ v4 C. Sll f[3000][3000];
2 a* ]$ V, q, C# S: V5 M, R
! D# i2 ^' ?" G/ f" d, Rvoid init() { //素数筛
4 D" [. n* c1 f; _1 l* l for(int i = 2;i<= 3000;i++) {3 W6 w# j: c1 j a" R7 X
if(!vis) {
( N) ]0 ]8 n! G3 t for(int j = i*i;j<= 3000;j+= i) {, ?0 X. }, K( q2 A, H7 V8 s
vis[j] = true;* ?5 P4 ]% q* m8 B
}
- w7 C* [5 j5 {1 n }! w" }: r* b" \
}
2 Q. N! J. `: }0 [. z* |6 Q for(int i = 2;i<= 2019;i++) {3 m; f4 K( }5 L3 g
if(!vis) prime.push_back(i);4 U" n0 F( M+ x+ W+ g: D
}0 A! Z& J+ ?2 D9 r4 Z% t4 i
}
& ]6 c2 u8 }, ^* C" E
% W7 _* n5 c: L- ^' Wll dfs(int pos,int sum) {
( Q6 Y+ G; t6 V if(f[pos][sum]!= -1) return f[pos][sum];( e% A; E* ]6 }0 @
if(sum == 2019) return 1;- W/ S4 a& ?: C8 b; b4 P- {9 T5 b0 c
if(pos>= prime.size()||sum> 2019) return 0;9 M. A- ~9 ^: G& m* }! {) i
: N% ]; W. L3 P1 ~
ll ans = 0;
b" J! L/ L# g& b7 j ans+= dfs(pos+1,sum);// 不要当前这个素数
Y" ~6 K+ J ^/ X3 | ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数
* r8 }, A% R* i+ g9 I return f[pos][sum] = ans;
( A1 P6 c8 ~9 r5 e! W# d}; u# S# S: M9 Z2 K: T& x
8 d( U% t* v% J6 K( ~/ Z0 lint main() {, _, N3 a( E7 x$ h0 y! R
init();
( ? C X1 c. G( w9 L4 j5 o/ S# [4 l
mem(f,-1);
6 @9 d0 k8 E5 Q! X* N x ll ans = dfs(0,0);/ U1 J" B8 S$ w. t; n% ^' G# e: n1 {
cout<<ans<<endl;7 I1 P3 `4 B% N) l! I& V
, f1 B& d$ v8 L1 C3 W4 @ return 0;$ V: l1 A, O, P' M! h
} g! x4 @, v& u/ `! X4 o
--------------------- 8 r% a$ }$ k5 V7 T/ B3 a
作者:nka_kun 3 V5 o" d* I" E3 ?7 |( h- J
/ N- x( m& K* { J7 V, s3 S& F
/ F' D) O+ G9 B/ t) }5 e |
zan
|