- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564478 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174566
- 相册
- 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组决赛题解第二题
2 ]! Y) V+ T, B# U, ~0 S9 Q& @4 C+ N% z7 _
求两两不同的素数组成2019的方案数
- p6 x% ^% y0 J9 W5 H( {注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
$ w: X& \4 n9 c/ x+ J结果: 55965365465060* Z8 z7 A! k1 c. b7 j
代码:
2 m1 q2 h! H+ n3 [8 H- g: F#include<bits/stdc++.h>) g0 s( d" B% c
#define mem(a,b) memset(a,b,sizeof(a))$ V5 x2 W/ F, J7 H6 a
using namespace std;
# O; ~/ w7 P3 O btypedef long long ll;" f, }/ l; a1 M, F2 q& v
const int inf = 0x3f3f3f3f;
+ M% V) y9 Y/ B$ p( O+ ]const int maxn = 3e5+55555;9 F* ^# s% u' ]& v$ F
const ll mod = 998244353;
; u: }+ n( J; b* H# Q7 Vconst double eps = 1e-7;' j& d7 L) e4 @3 q( e8 q
6 A* M% C6 m4 p! U6 X
bool vis[12345];( f7 Z0 m$ l! x7 H+ V$ C! z6 _- Y3 x
vector<int>prime;! g& i3 z# p; y. M `2 D/ H
ll f[3000][3000];
/ W; H1 r9 D. k( i ~( ~7 W$ o( H @* N
void init() { //素数筛" s. q3 K4 t5 m
for(int i = 2;i<= 3000;i++) {0 N- s1 I* B! T! u7 z2 h6 O0 u
if(!vis) {
) O# q j% U' | for(int j = i*i;j<= 3000;j+= i) {
9 t. y" Q c4 Y vis[j] = true;
+ _9 t7 u0 _! h1 a2 N }
2 u4 \4 R! J, B: P! Y }; S6 |- z7 x( U9 t/ V @
}6 `3 {9 X' v8 y7 C# t* f
for(int i = 2;i<= 2019;i++) {6 T8 E) {9 ~4 T: i; W. ~, j( F, i
if(!vis) prime.push_back(i);
( f7 R8 C& D/ P* d# | }4 w7 r2 ]3 G7 \5 e2 m) F4 x
}; f4 |6 E! m" {) c. {
9 l4 N# m x/ [7 u) N0 F& Bll dfs(int pos,int sum) {$ C8 D' u3 z; n, s& ?
if(f[pos][sum]!= -1) return f[pos][sum];% f: Y8 b2 x( G! c. V( F. m
if(sum == 2019) return 1;& b H5 ]( L, G: E
if(pos>= prime.size()||sum> 2019) return 0;
T. @3 C7 f1 {' ?, k3 E0 E3 |, ?
3 K, K; x8 q/ {& `9 B R ll ans = 0;
- ]" z ^+ D- a- c ans+= dfs(pos+1,sum);// 不要当前这个素数
. X- j" y& q* i9 W" d2 {5 t ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数- N/ G9 Y/ I2 h9 q/ W
return f[pos][sum] = ans;* z2 H G' U/ l. q
}
* a% ^2 B! T1 A+ p. s h8 o0 V3 |$ l! a: o$ Y6 ~: I& I
int main() { ~1 U3 u3 ~4 I1 x B
init();, x" d( Y- y7 k* d6 i* E5 Q1 G
* q" U3 f* g5 ^; H. K5 ~% g8 K mem(f,-1);
: m$ G3 O( K" z& s4 y ll ans = dfs(0,0);$ b5 U3 E# ^; E: B/ a
cout<<ans<<endl;" q7 ]9 F3 q' t5 w
6 L( B% v* T; j8 H return 0;
- O& e6 Z+ ~1 h: @}
$ g: `6 E! x! x+ J! X---------------------
+ f/ X3 ^& F& J/ D作者:nka_kun
1 d4 V; \0 D* A- E
2 p. {! E2 [4 Z
( B: I2 [* `: r: L5 i+ @ |
zan
|