- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563333 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174223
- 相册
- 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组决赛题解第二题% p# u$ Y1 Q" Y3 O A% I
7 G7 C' V- q ]% F" n求两两不同的素数组成2019的方案数
4 U5 E, |- n; U% C8 k& @注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
& c/ ^) C; l" s, w# g2 V% e结果: 55965365465060' P& J$ S( [+ }0 i2 T7 e3 h0 P
代码:: c1 k- k0 d( O
#include<bits/stdc++.h>( N, l. p3 D* @. X+ i [$ \# m
#define mem(a,b) memset(a,b,sizeof(a))) p& L7 ]2 ?7 T* E b. {% T) o
using namespace std;8 y' H3 F! Z3 Q, K" f# q4 W1 O }
typedef long long ll;
. [5 q, w- g1 q# R& B# Kconst int inf = 0x3f3f3f3f;
' ]" V4 z; A! }+ H4 Uconst int maxn = 3e5+55555;9 m& H$ P- `2 X
const ll mod = 998244353;5 r" {$ R$ u; x/ g% v2 T
const double eps = 1e-7;" J+ h4 b8 V$ I9 P5 ~
; {) P: |: t; N3 P9 \; Y
bool vis[12345];: g& [! y& k G! Q8 n, ~2 u
vector<int>prime;
: o( j/ p* f8 d3 c6 S; }" B$ Yll f[3000][3000];+ v; _. D" Z) r# s4 t/ n
% K" U( h! e! C& g9 t7 Nvoid init() { //素数筛1 t" P9 G, g# ~$ q, Z
for(int i = 2;i<= 3000;i++) {
$ v; W5 I( k! S( g. o if(!vis) {
; h. b5 U/ h; f# V for(int j = i*i;j<= 3000;j+= i) {( V9 Z7 F8 i: ~$ H3 w$ x: O$ Q
vis[j] = true;
9 O) I, L& H2 f* q }: [% C) v" L: N; ?; w
}
6 d1 S, w; _, `. Q) m }
/ B6 h+ c" q/ J& y4 | for(int i = 2;i<= 2019;i++) {" }3 u) d& h( @& U
if(!vis) prime.push_back(i);
( ~# I3 }$ j' \( V( d o }) F% ?2 T! H1 s9 V8 H# z2 p1 Z' M
}$ ^0 l6 v: d' J% D" p9 }
* a0 p- H6 Z, M! U; R% r7 tll dfs(int pos,int sum) {
% U! o5 k; G2 u$ m if(f[pos][sum]!= -1) return f[pos][sum];
( p4 ]2 y# E; O1 l ? if(sum == 2019) return 1;
3 f6 y9 h, K0 U+ ~- W if(pos>= prime.size()||sum> 2019) return 0;! U! K5 S/ |, c. C3 T
, H2 p. }2 Q; B ll ans = 0;& s6 [! B& b2 q p8 S q
ans+= dfs(pos+1,sum);// 不要当前这个素数+ ]% X* T5 S5 K6 q3 s7 f; ^$ ]8 |
ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数
7 u8 h1 E- G8 b1 t return f[pos][sum] = ans;
; T: N% n5 ]) ~: @}
6 q( g; B$ A `5 K& J' X7 K- r3 H9 Z- h9 N
int main() {7 p; h! Z5 B8 w+ D9 b$ R% `3 k
init();
! ?9 W: T& S5 V6 h& l% s7 u; J# l3 |$ J, F. T) c& M
mem(f,-1);# F. g: B" ^& F/ M8 g0 n9 h! ~
ll ans = dfs(0,0);1 Q7 A. h# E0 C* k3 l8 ?, n* X
cout<<ans<<endl; z- A9 a: I$ r0 u+ w3 L0 Y5 X
) b9 ]+ Z6 e9 Q: l
return 0;
9 s: h! f9 b! [* n}
* {- F7 W9 G! b% C% H4 b---------------------
: a" J+ `$ k' {* v作者:nka_kun
3 ]+ ^' m, X8 S& a0 b9 h+ E$ k% s$ B' n/ G' w
! V6 q# S4 O O0 V% |
|
zan
|