- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565670 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174924
- 相册
- 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组决赛题解第二题
8 o( B8 t8 L9 u7 X. C/ r+ G8 k5 W# x
求两两不同的素数组成2019的方案数
7 @' X1 A5 g3 p" d3 N7 C注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long, M2 s; }9 T& J+ ^% y
结果: 55965365465060% k6 e; Q/ H0 D9 x% Q3 p3 _
代码:
: \6 b- W0 V" m& \#include<bits/stdc++.h>
4 q" y$ y% l" c#define mem(a,b) memset(a,b,sizeof(a)). M3 B* E8 I3 L+ |4 d
using namespace std;
0 k" S' y& [$ l' e6 Q/ itypedef long long ll;" O1 R E* m4 [; h$ @: z
const int inf = 0x3f3f3f3f;
0 r( J$ C( F) J$ G/ e1 Q2 e4 lconst int maxn = 3e5+55555;; R/ ?, Z3 J# f. i E+ J4 D
const ll mod = 998244353;
- n& l$ M4 D& d6 ^+ z6 `const double eps = 1e-7;+ u& I7 Y9 s( { i& O0 ~% x
4 Y) Q! S7 t! O5 N0 h0 |bool vis[12345];9 @6 V5 j5 L! i( G s& k. T2 l: x
vector<int>prime;
' C/ j; c" d) p4 y7 Z$ z1 Ell f[3000][3000];" v8 d+ M0 d6 ~5 G/ o( P( Q
% ^- G8 `" z+ @, q
void init() { //素数筛
8 ^' o2 O9 z, m+ g' ] for(int i = 2;i<= 3000;i++) {. ^" H! O% S$ u% h/ ^& ?
if(!vis) {6 ]' S9 Q/ _: d7 _
for(int j = i*i;j<= 3000;j+= i) {# v# i4 X- Z: j
vis[j] = true;
5 N- h! N( ~6 Q; c F6 q+ A }9 y |9 H2 e" f( v
}
0 x: N* s6 x3 x! g/ M }7 P! O/ t* q! p( w; l% F
for(int i = 2;i<= 2019;i++) {, T9 O8 w( a- D M& s
if(!vis) prime.push_back(i);
* `9 ^4 q, H6 l5 V% h6 [ }
' D+ ^! G$ d- X6 [( J$ V3 g7 P* w5 m}
. ~ A, I$ h* u" U- p
1 m, D& s0 \2 k y& x2 v* R! |ll dfs(int pos,int sum) {
7 |1 f& g6 ]1 @ if(f[pos][sum]!= -1) return f[pos][sum];( l6 {8 A4 c0 t) \3 h, z. T9 ^! f! u. t) S
if(sum == 2019) return 1;$ [% n7 M2 r# n& p8 ?& Z) Z
if(pos>= prime.size()||sum> 2019) return 0;
8 ?7 L! G; o6 g. ?" b) ?. ^/ U' V) o; ^
ll ans = 0;, Y; @6 ?) t, I( H7 i4 c; Q) l+ e
ans+= dfs(pos+1,sum);// 不要当前这个素数: n5 x. ]+ k4 n _- N& V
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数5 s) K+ r/ y8 k3 B+ z- i
return f[pos][sum] = ans;
) b& ^2 f$ H- z, ]}& O6 O" H* {) i; B2 Q1 A9 x9 s
; W+ d/ j1 o& t) ]5 g3 C6 i9 [int main() {, _* X4 A2 o2 L( J( ` f1 H
init();
6 y7 W9 q2 S d/ R
' r; Y% V1 L! O$ S4 H mem(f,-1);; e1 f, l7 c3 E e
ll ans = dfs(0,0);# C: c1 K" z) G5 C
cout<<ans<<endl;$ X- n {4 L- s8 z: }# V' ?
% Y2 D( i0 B7 f- F. ~ return 0;
G6 ?0 Z$ H% U: `. h3 _1 S& `}3 k, w) f* `7 _9 I
--------------------- + u' h* F8 t0 f" T
作者:nka_kun
5 d5 B0 p9 M. r" n; G
1 {2 y( M* M, D8 H* i Y3 v3 B4 ^" G+ G. s% X
|
zan
|