- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565621 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174909
- 相册
- 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组决赛题解第二题
+ S. l2 k1 T+ m0 `1 R- x( H; f: b- R3 i, H& Y* |* G
求两两不同的素数组成2019的方案数/ p9 W8 Q1 n! A. X( B
注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
8 X) S3 Q5 m7 a* Q# M5 w4 u# U结果: 55965365465060
) f. Y/ K+ q& M# J代码:
F$ B" x+ w7 d" N; y6 Z' b#include<bits/stdc++.h>; ^0 h8 [) k6 z4 ?$ q1 Y
#define mem(a,b) memset(a,b,sizeof(a))
' G$ A: F0 _0 Q' q( ousing namespace std;
, a# N" X8 l9 `6 u$ E5 Qtypedef long long ll;0 L4 o4 \8 g& X; ^8 H b
const int inf = 0x3f3f3f3f;
% q) q) o* u1 |4 `const int maxn = 3e5+55555;6 F4 g7 L" K& S" W
const ll mod = 998244353;
6 W8 E$ V5 ~- I6 d7 w" N. Uconst double eps = 1e-7;! [+ J/ G! _+ ?) J! U6 t* Q
; ?0 E8 Q8 _/ @/ V+ V" }5 b
bool vis[12345];" j: A$ d& q0 z0 E7 u5 o$ W5 {
vector<int>prime;! B& p- w7 b9 [5 B# W
ll f[3000][3000];
8 m9 N$ l% ?! W
# W) a4 T/ a" _$ y0 Cvoid init() { //素数筛7 K" F5 k. Y0 R5 }+ S
for(int i = 2;i<= 3000;i++) {& r" i0 }: U/ F3 ? I. Y7 E& k* t% Q7 ~
if(!vis) {
% i! o3 S# }+ }& j) h for(int j = i*i;j<= 3000;j+= i) {
. y7 _; q1 r/ [) \, b vis[j] = true;) `, M7 u3 A% i8 a
}
2 o t+ }$ J) D }
, }" o+ g) S1 t+ e8 ~ }. G" O' |. `* y: P/ D6 J1 f- @
for(int i = 2;i<= 2019;i++) {2 l2 F7 \9 x! g; a# f
if(!vis) prime.push_back(i);
9 y3 f# }) O2 m- s: f c: ~ }& K Z" U! U$ Q! }
}
9 A" Y, h) l$ j/ w0 ~! a5 }% t0 ]- @4 w% y3 L
ll dfs(int pos,int sum) {; ^" o" U* o. {" L& J
if(f[pos][sum]!= -1) return f[pos][sum];
3 m5 q4 ]6 G; P I if(sum == 2019) return 1;( c e: l4 j. q7 v5 a0 V/ \* J/ e
if(pos>= prime.size()||sum> 2019) return 0;
. \3 g" e7 J( v' P& }0 Y0 N$ I( Z" w2 l! L& {5 U9 e" }( A
ll ans = 0;
2 T# ~$ G7 \/ z7 [/ |$ G$ W% x ans+= dfs(pos+1,sum);// 不要当前这个素数- c7 J) g/ e! z
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数
7 [3 G0 N) B* W& g return f[pos][sum] = ans;6 E6 j! v2 x7 c
}" V* D! k8 G0 o4 ^( n
7 \' [$ a; s$ J- R9 k4 N% P3 `
int main() {
1 m9 n2 T. P/ c7 w: s init();% h C8 y2 } _4 R. }
9 u/ D% s2 ^: {# ^0 Q2 f; E mem(f,-1);
+ ]2 o5 d% J% {/ h. }3 S ll ans = dfs(0,0);
+ t: C6 [5 N: V' E cout<<ans<<endl;2 h# Q$ n! p' X R
0 l5 ]4 b& F7 v# h- a! \ return 0;
, q5 s# @, q; ]+ ?}
. k1 _) z d1 p3 D--------------------- 0 I0 _2 g6 R7 B) I3 V
作者:nka_kun
l+ w8 T# \9 k( O v5 B5 z) b" _* U
% ?0 B& S" q2 m8 Y, Q5 r
|
zan
|