- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563312 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174216
- 相册
- 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组决赛题解第二题& E/ S1 Z) A: d1 {- i' U
7 ^2 l# t* N- ~4 X# L2 M/ [求两两不同的素数组成2019的方案数" P" S( o' Z- O7 b9 Q3 C
注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long5 c, V* W6 a. _- l
结果: 55965365465060% a1 I, ^0 Z* ~# l& X
代码:! `2 ]+ X4 D8 n9 C7 E, G/ P
#include<bits/stdc++.h>
9 B1 |; d9 w8 v$ R7 ^% y# H#define mem(a,b) memset(a,b,sizeof(a))
( e6 o. p1 u' c' R0 M) G3 }using namespace std;$ \" I* `# Q2 w( o4 s
typedef long long ll;
- R! y4 r- ?" |3 k+ X+ Iconst int inf = 0x3f3f3f3f;: ?$ y" E- q/ F1 e$ i
const int maxn = 3e5+55555;
1 R2 W6 }& Q9 S6 H# U# bconst ll mod = 998244353;7 I) E% x, \' c! ]: m( J+ g
const double eps = 1e-7;
4 M F, s1 ], G6 @- O5 S# E# n; v; |- P0 W
bool vis[12345];/ `4 q( X' W% U+ |
vector<int>prime;/ m' o: D/ t3 t( X2 f3 r" v
ll f[3000][3000];$ B$ _+ K5 w |2 `' Z" D- `2 z
% ^, x o& C" T$ z0 B0 t7 Q4 Z$ h
void init() { //素数筛8 q; ] }/ L5 w a. q/ V* A* \7 f- j$ Z
for(int i = 2;i<= 3000;i++) {
2 T7 F: h( n! K& c if(!vis) {+ z( C+ E% X& F6 x/ h
for(int j = i*i;j<= 3000;j+= i) {
5 W X, K6 E: \3 ~" ?2 [ vis[j] = true;
* `, I& W2 y, v- W }
* U* L5 K. F+ O; I }$ H k% d |% T5 u+ w" H
}/ E6 y' h; d; Q# F7 w5 F8 @
for(int i = 2;i<= 2019;i++) {
- v9 t0 ^* `+ _ C8 S: [ if(!vis) prime.push_back(i);- x5 f6 p7 B. g4 ?+ B* v3 a
}0 k( B/ E# V" v0 o2 e% A
}$ {5 X( z; D4 s& @: }& J5 |
2 |8 f9 Z7 w, {/ T5 H# L6 v: fll dfs(int pos,int sum) {
3 P' t& |# [& D" ?- r! j if(f[pos][sum]!= -1) return f[pos][sum];3 N. ` _# a, ^: X3 B9 N: Z
if(sum == 2019) return 1;
2 f! B$ E% E, I3 {& \ if(pos>= prime.size()||sum> 2019) return 0;
) B8 J, x3 |1 `+ V4 m
6 V j% I6 d# G" x ll ans = 0;
3 V, b- Q0 O* b! n9 B ans+= dfs(pos+1,sum);// 不要当前这个素数8 R% f. E; V* c! W/ e
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数
" u4 Q+ @; M3 t return f[pos][sum] = ans;( ]. L) m2 j# p1 o$ l: N8 T, e- A
}* _+ F! N: W# L5 ~7 l' Y
" l: X* i% q' v: u6 t7 Fint main() {- m! C c8 V, L# X) V" ]
init();
2 p9 \0 C- f0 I; Y2 V* s
" K6 E. S+ e! M1 u+ v& v" p* d mem(f,-1);
% V3 i. O5 S0 T! Q4 @ ll ans = dfs(0,0);& v* s4 _% m, W
cout<<ans<<endl;- d5 X/ R+ }; z, n
$ a7 u9 B% J& I) H+ y return 0;
2 ^/ Y8 m* X( q. ~2 i; {}/ m$ u# r- Z7 N6 G! f
---------------------
6 C! l8 L5 B( }, C作者:nka_kun 1 C! U g* o6 b, L2 h( r) _+ W
- k, D& j: H0 [$ D# f/ G% f# n
% D) @( j/ t" _; H6 u0 d; O
|
zan
|