QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2443|回复: 0
打印 上一主题 下一主题

2019第十届蓝桥杯B组决赛题解第二题

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2019-6-28 15:49 |只看该作者 |正序浏览
    |招呼Ta 关注Ta
    2019第十届蓝桥杯B组决赛题解第二题
    3 H1 T4 I  L: [' W( }# V) B" G# T. z) L  H0 l6 a! l: |' t
    求两两不同的素数组成2019的方案数! p6 e9 F7 `& K" u
    注意点:并不是两个不同的素数,再者直接搜索应该会TimeLimited,所以用dp或者记忆化搜索,方案数可能很多,记得用long long
    ( H% v; o) ]) q) ?8 z0 y结果: 55965365465060/ O* h' x! L. x0 f
    代码:7 p. B4 d5 \  Z  i4 G3 F) a, Z
    #include<bits/stdc++.h>
    " ?; S; |3 R* k' A2 H* v( b) s#define mem(a,b) memset(a,b,sizeof(a))- n4 a. u, c( j; f6 u8 I
    using namespace std;
    , A7 G) E$ C. \6 w! @2 n- stypedef long long ll;
    / m, z( L' f. L. sconst int inf = 0x3f3f3f3f;
    + O& O- K  x) F5 U: }  cconst int maxn = 3e5+55555;, W/ d3 G$ B$ e! I' k7 q
    const ll mod = 998244353;
    ; b4 i4 G. O7 E7 O- a+ p3 @const double eps = 1e-7;
    ! z% e- @; `; X2 S* h) [' X# \9 g2 @# U, p, S- v1 w7 k' T2 W
    bool vis[12345];  ]! _- i, P4 A  y6 ~0 D5 C
    vector<int>prime;( p" t5 R& ?5 ^, h9 F) ?
    ll f[3000][3000];
    " c9 a! x  n& [! F- b4 f: B4 q  @  {: L# D7 x8 g6 l: H* \+ ]# l9 X
    void init() { //素数筛& `& x- s, d2 y7 g5 F
        for(int i = 2;i<= 3000;i++) {
    # W- V0 @3 S9 O5 y5 \9 f' b  Q5 R        if(!vis) {; Z0 F3 Q3 A% q0 K' m0 r8 v
                for(int j = i*i;j<= 3000;j+= i) {
    8 w0 E3 j( U7 P) X/ i" n3 C                vis[j] = true;
    ; d8 l; w- p0 [8 Z4 |6 r1 `  |            }3 s+ N; s% b, I  p
            }/ z& [$ J; q. z
        }
    4 ~( C/ B0 J- Q' H    for(int i = 2;i<= 2019;i++) {
    / k0 s3 Z" u$ Y% I: v        if(!vis) prime.push_back(i);
    ) U/ W& Q6 q0 o/ {( k6 v    }
    5 s' ?$ Z. L( _. j3 Y' x* J}
    ' \: E$ P( y' Y# z( `& m5 R( a  w9 v2 F+ j7 p1 d
    ll dfs(int pos,int sum) {! o* L* q- Y$ y7 v: p
        if(f[pos][sum]!= -1) return f[pos][sum];
    1 g  ^3 m( z2 c; \0 R. N' S    if(sum == 2019) return 1;  m7 [- X2 ?( F6 a0 R
        if(pos>= prime.size()||sum> 2019) return 0;
      T* d7 V" D5 Y* V
    8 M+ y# v, K  A% F: Y    ll ans = 0;% a& M( R( p# {+ D
        ans+= dfs(pos+1,sum);// 不要当前这个素数7 L9 e- ]% v& x% Q
        ans+= dfs(pos+1,sum+prime[pos]);// 要当前这个素数* Y: E; O  r6 k+ j* h8 g# g
        return f[pos][sum] = ans;
    / v$ J0 g/ P1 X' F}
    6 p6 E/ A0 g" X$ O( i  h
    6 O1 S: b# [: pint main() {
    + j) `5 @& T, O, D, I$ P    init();3 R- \/ T. b0 d+ e  U
    ( n4 W6 o+ Y' b5 _; N
        mem(f,-1);; ?) ?: |6 Y- y7 C
        ll ans = dfs(0,0);
    " K/ Y5 j; f* g/ f$ e    cout<<ans<<endl;8 j: s" ?3 G- q5 @/ v% _
    ; L/ q9 W: |: ~' }& u
        return 0;4 ?: k! s5 w8 r" y6 q; \1 n9 A' P
    }) ]: ^' ?* f# I$ [" a" E
    ---------------------
    # _+ {8 g6 T# h作者:nka_kun 2 V  U' W4 t! G( P, L
    ; {7 V# h4 I& j8 h2 s  {9 p3 z

    4 H2 v! h5 {6 w) P3 g2 k
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-14 19:27 , Processed in 0.422269 second(s), 52 queries .

    回顶部