- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 564693 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174631
- 相册
- 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组决赛题解第二题
6 q0 Q* x1 r F4 [8 a' o( a5 r! D! v, w5 B# z# \' }
求两两不同的素数组成2019的方案数
8 o. N* x) T9 O: j0 \注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long0 i" _3 f @8 O5 G
结果: 55965365465060' v3 a+ M f. s1 k+ M. }
代码:4 h# J. x$ S7 i' ?& O6 q: [0 ^
#include<bits/stdc++.h>
# z; o5 P0 h6 |7 O+ y1 r+ ]) U0 q#define mem(a,b) memset(a,b,sizeof(a))8 n3 k2 W6 ]# _# x; T3 `& H
using namespace std;
& q; F) b4 B4 X$ J- V" Gtypedef long long ll;
( ?9 W! d+ n' }, cconst int inf = 0x3f3f3f3f;. @8 a8 C. ` U. t
const int maxn = 3e5+55555;
$ ?, S4 k$ C) A- O' q$ U; g' g0 yconst ll mod = 998244353; [& X: ?' Q* n$ Y7 w8 d3 u
const double eps = 1e-7;
: c. ~, V. K- x# t4 P0 ]7 s& ]# A" \$ v) d4 d5 u
bool vis[12345];
$ R: z' ~6 _! e9 ^; F- K) `vector<int>prime;5 }( m4 M* m% @; e, E
ll f[3000][3000];
1 M3 N9 G" S/ Y6 S% T5 D. D( g2 l: q0 T4 b- Q
void init() { //素数筛
3 ~8 c9 {9 Q+ W {- A% B7 I0 ~" T for(int i = 2;i<= 3000;i++) {
6 }# s( n7 y4 f if(!vis) {
) L$ c- Y8 c7 v3 N) e5 Z* W: w j for(int j = i*i;j<= 3000;j+= i) { _4 f4 r# |6 A0 _& J
vis[j] = true;; M2 o( r+ @6 B d/ B, I- W
}; X( u$ h* u5 c' r' c- [& T. e
}
" f* E f8 {* a% B }! u } r" ^5 ^7 U
for(int i = 2;i<= 2019;i++) {1 E" b" T$ W( g5 v' p
if(!vis) prime.push_back(i);8 g: i0 Y; N7 r. |4 L# E7 J/ S
}
- o% o7 g" `1 H4 {6 e/ n}0 k9 _8 \1 Q( h
* p2 B' C$ _3 G: N7 O7 x: j) ~ll dfs(int pos,int sum) {; A& H3 n& K Z* _0 h
if(f[pos][sum]!= -1) return f[pos][sum];0 @( G( }* }3 R4 x$ T4 J% q
if(sum == 2019) return 1;1 H0 A% t/ C, ?3 ~, }8 K- i
if(pos>= prime.size()||sum> 2019) return 0;! @1 P$ r% |* T! H$ q8 K
, o( t" r0 U4 }# c0 z2 R6 N8 V
ll ans = 0;
, p- [4 P* @/ T' ~ ans+= dfs(pos+1,sum);// 不要当前这个素数
5 i0 o& B4 p" P8 C# ] ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数
! @4 u4 T: G$ q+ k return f[pos][sum] = ans;
. c; j1 ?# t+ M0 z* U a}: F! E+ r- h; j& I( e$ H
7 f3 H/ G# R- Q. G- u! N4 v1 p# q8 Nint main() {; Y% W" G( T9 z2 A5 h2 T5 `- C- Z
init();1 q, q, _6 ?( W
0 f2 K- Y# f3 E" N$ t( ? mem(f,-1);& \7 Z& }2 H9 X1 J. M% ~9 k% t( Y
ll ans = dfs(0,0);
1 _8 M5 c( f- { cout<<ans<<endl;$ o& G5 @+ _, Q: I* l8 l
2 A- q, ^* l% j$ }" {$ q return 0;: r5 s& J; [1 X$ x8 B: x
}
- v- d- I( f/ Q& k3 O---------------------
1 |- C1 L6 ~7 v' d' T0 \0 t2 U作者:nka_kun + Q0 ?) Y; G# Q
/ z# ?% ]3 D6 `) e/ s" y$ |% P* s
" _' p* Y: }; z6 l
|
zan
|