- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 563326 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174221
- 相册
- 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组决赛题解第二题
. h- \, _+ R% Y$ `; g3 |' s/ P4 T$ B! @8 l2 d- `* A
求两两不同的素数组成2019的方案数, S4 A' S2 ~0 F6 Y$ |) q
注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
% H, F. a/ W; [! j结果: 55965365465060; V2 t3 i; G( a* ^7 ]( S
代码:
0 T- ?! D; | a6 o- a#include<bits/stdc++.h>
2 m& p( p/ v: y4 `9 v' U#define mem(a,b) memset(a,b,sizeof(a))9 a0 r: o* w; j/ K8 e i: |
using namespace std;
' B1 f* o4 X8 K! i! z* j3 Ntypedef long long ll; \! Y; R+ t5 P
const int inf = 0x3f3f3f3f;- o* K- m+ {' o
const int maxn = 3e5+55555;! D& u! o% h0 [8 Z2 L; H: ]7 f
const ll mod = 998244353;
) H- B8 p% T+ b. `/ M" Econst double eps = 1e-7;
" n4 r) e& Q. x: o1 i9 S. E7 H* U* z) v7 w/ G0 E) O- X5 W
bool vis[12345];
& h5 ]7 f/ m F/ F- `vector<int>prime;6 N6 \2 z0 `% O: O6 x+ L
ll f[3000][3000];
0 d2 D p% ^1 I4 T( C7 H5 d1 \( C! [) I7 t% X9 ~6 ~: _
void init() { //素数筛
! o+ C7 u. N8 j) Q9 g9 o for(int i = 2;i<= 3000;i++) {
5 j; Y: O0 G9 ^) A, e- N: e if(!vis) {7 W! u- `/ x0 |( D
for(int j = i*i;j<= 3000;j+= i) {) c8 C" [# l1 J
vis[j] = true;1 u; e5 n. d: ~0 y) M
}
( H. Z4 @" _+ V: T* p+ r }8 C; m8 S- h7 m4 V; _. O" s- ^. ]
}
* \2 T0 k5 M7 }, E6 g- U/ x for(int i = 2;i<= 2019;i++) {& A% c$ C8 M. w' f3 _- [: A
if(!vis) prime.push_back(i);# [$ J( k7 _& H# F2 T- W
}/ t& U. n9 R+ w4 P% |
}4 D% V2 v1 Q# @6 n
9 J0 l) X$ Z6 ~9 h+ r' E) |6 all dfs(int pos,int sum) {
$ j( I/ k, b2 n9 ? if(f[pos][sum]!= -1) return f[pos][sum];3 _% [5 @$ Z/ ~( a: L- W9 p
if(sum == 2019) return 1;. I. M% Q9 z- j# Z) }5 S, N* V
if(pos>= prime.size()||sum> 2019) return 0;+ }8 A( v3 k# n4 ]' {& z& F& q# {( I
' V# |, @# R0 z6 j8 Q% E$ ^ ll ans = 0;
r# X5 K9 I' y# E) H: \ ans+= dfs(pos+1,sum);// 不要当前这个素数
4 z9 i% n* k" o/ E+ y) u7 D ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数5 e+ Z+ ~( M3 E# t( m7 E( [/ G9 t+ s
return f[pos][sum] = ans;4 H- U% J% \$ U! X) y0 S
}
) r: q, P' M) ^# Q( ?
. T' a: h4 g: l" G: m9 Wint main() {2 ^/ {1 w/ E) i1 j) w3 t
init();. a4 L, F5 Q7 P: ~# l. m
- Z7 q$ @8 L) i) o% d* d: V8 S/ i mem(f,-1);- ~ g; B9 [9 {- a' u/ c9 s+ b7 @
ll ans = dfs(0,0);' S, f& W" i; `) L: ~* z
cout<<ans<<endl;/ q) u' O# R; [- }/ T. b
+ `8 y; h1 @; J0 k. j" C1 J! b/ E8 S# T return 0;
; Y) ~- W! z! J}
3 l b: e. ?$ ?/ {! A: t1 u---------------------
( z. `4 ?5 m. V8 n& u, J作者:nka_kun
7 c. y1 H8 O+ M5 a3 C4 b! W
* [$ F8 H2 Q- ^: I/ H% V' y. H
% v% @9 ^0 f! \/ G |
zan
|