zoukankan      html  css  js  c++  java
  • P1832 A+B Problem(再升级)

    P1832 A+B Problem(再升级)
    题目提供者 usqwedf
    传送门
    标签 动态规划 数论(数学相关) 洛谷原创
    难度 普及/提高-
    通过/提交 107/202
    题目背景
    ·题目名称是吸引你点进来的 ·实际上该题还是很水的
    题目描述
    ·1+1=? 显然是2
    ·a+b=? 1001回看不谢
    ·哥德巴赫猜想 似乎已呈泛滥趋势
    ·以上纯属个人吐槽
    ·给定一个正整数n,求将其分解成若干个素数之和的方案总数。
    输入输出格式
    输入格式:
    一行:一个正整数n
    输出格式:
    一行:一个整数表示方案总数
    输入输出样例
    输入样例#1:
    7
    输出样例#1:
    3
    说明
    【样例解释】
    7=7 7=2+5
    7=2+2+3
    【福利数据】
    【输入】 20
    【输出】 26
    【数据范围及约定】
    对于30%的数据 1<=n<=10
    对于100%的数据,1<=n<=10^3

    /*
    又是所谓方案数背包,
    这题以前是用回溯做的——
    先把1到n的prime nubmer 搞出来.
    然后跑背包.
       from 1 to J的方案数
        由j-i的方案数(i为质数)转移而来. 
    */
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #define MAXN 1001
    using namespace std;
    int w[MAXN],n,tot;
    long long f[MAXN];
    bool jd()//埃氏筛. 
    {
        for(int i=2;i<=n;i++)
        {
            if(!w[i])
              for(int j=i+i;j<=n;j+=i)
                w[j]=1;
        }
     } 
     /*for(int i=2;i<=n;i++)  //普通筛法. 
        {
            if(!jd(i)) w[++tot]=i;
        }
        f[0]=1;
        for(int i=1;i<=tot;i++)
          for(int j=w[i];j<=n;j++)
            f[j]+=f[j-w[i]];
    bool jd(int x)
    {
        for(int i=2;i<=sqrt(x);i++)
        {
            if(x%i==0)  return 1;
        }
        return 0;
    }*/
    int main()
    {
        cin>>n;
        jd();
        f[0]=1;
        for(int i=2;i<=n;i++)
        if(!w[i])
          for(int j=i;j<=n;j++)
            f[j]+=f[j-i];
        cout<<f[n];
        return 0;
    }
  • 相关阅读:
    Day 43
    Day 42
    Day 41
    Day 40
    Linux下查看服务器的产品型号和序列号
    AgileController Portal认证成功后弹出找不到指定位置的资源
    华三交换机snmp开通
    FusionCompute 6.3.0 CNA系统安装
    集群IMC策略
    静态路由配置语法
  • 原文地址:https://www.cnblogs.com/nancheng58/p/6070830.html
Copyright © 2011-2022 走看看