START:

2021-08-09

15:28:07

题目链接:

https://www.luogu.com.cn/problem/P1832

给定一个正整数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

该题 zha 一看是数学题,但是这里可以使用DP。

我们可以将输入的n视为背包的容量,从1到n的质数的个数看做物品的种类,每个质数看做物品且每个物品可以拿无数次,这就是完全背包问题。 我们定义cnt来计算质数的个数,用sushu[N]数组来储存每一个质数(下标从0开始),写一个判断质数的函数以及初始函数init(),定义dp[N]数组,dp[i]:表示将i分解成质数相加的所有的方案数。那么我们可以知道,对于每一个dp[i],我们有:dp[i]=dp[i]+dp[i-质数],并初始化dp[0]=1。这就是核心函数solve()所包含的内容了,下面给出除了solve()函数外所有代码:

#include<iostream>
using namespace std;
typedef long long LL;
const int N=1005;
int n,cnt=0;
LL sushu[200];
LL dp[N];
bool isprime(int u){
for(int i=2;i<=u/i;i++){
if(u%i==0)return false;
}
return true;
} void init(){
for(int i=2;i<=n;i++){
if(isprime(i))sushu[cnt++]=i;
}
} void solve(){ } int main()
{
cin>>n;
init();
solve();
return 0;
}

  

现在开始写solve函数:按照完全背包的模板来:

最外层for循环是遍历每一个质数,内层循环是遍历从当前质数sushu[i]到n的所有dp[ ]数组,然后每个dp[i]=dp[i]+dp[i-质数],所以

dp[j]+=dp[j-sushu[i]];

void solve(){
dp[0]=1;
for(int i=0;i<cnt;i++){
for(int j=sushu[i];j<=n;j++){
dp[j]+=dp[j-sushu[i]];
}
}
cout<<dp[n]<<endl;
}

  

最后奉上最终代码:

#include<iostream>
using namespace std;
typedef long long LL;
const int N=1005;
int n,cnt=0;
LL sushu[200];
LL dp[N];
bool isprime(int u){
for(int i=2;i<=u/i;i++){
if(u%i==0)return false;
}
return true;
} void init(){
for(int i=2;i<=n;i++){
if(isprime(i))sushu[cnt++]=i;
}
} void solve(){
dp[0]=1;
for(int i=0;i<cnt;i++){
for(int j=sushu[i];j<=n;j++){
dp[j]+=dp[j-sushu[i]];
}
}
cout<<dp[n]<<endl;
} int main()
{
cin>>n;
init();
solve();
return 0;
}

  

END:

2021-08-09

15:44:05

洛谷 P1832 A+B Problem(再升级)题解的更多相关文章

  1. 洛谷——P1832 A+B Problem(再升级)

    P1832 A+B Problem(再升级) 题目背景 ·题目名称是吸引你点进来的 ·实际上该题还是很水的 题目描述 ·1+1=? 显然是2 ·a+b=? 1001回看不谢 ·哥德巴赫猜想 似乎已呈泛 ...

  2. 洛谷P1832 A+B Problem(再升级) [2017年4月计划 动态规划03]

    P1832 A+B Problem(再升级) 题目背景 ·题目名称是吸引你点进来的 ·实际上该题还是很水的 题目描述 ·1+1=? 显然是2 ·a+b=? 1001回看不谢 ·哥德巴赫猜想 似乎已呈泛 ...

  3. 洛谷P1832 A+B Problem(再升级) 题解 完全背包方案计数

    题目链接:https://www.luogu.com.cn/problem/P1832 题目大意: 给定一个正整数n,求将其分解成若干个素数之和的方案总数. 解题思路: 首先找到所有 \(\le n\ ...

  4. 洛谷P1832 A+B Problem(再升级)

    放题解 题目传送门 放代码 #include<bits/stdc++.h> using namespace std; ];//n为被分解数 a数组用于存储素数 ];//dp数组用于存储方案 ...

  5. 洛谷 P1832 A+B Problem(再升级)

    题目背景 ·题目名称是吸引你点进来的 ·实际上该题还是很水的 题目描述 ·1+1=? 显然是2 ·a+b=? 1001回看不谢 ·哥德巴赫猜想 似乎已呈泛滥趋势 ·以上纯属个人吐槽 ·给定一个正整数n ...

  6. 洛谷1001 A+B Problem

    洛谷1001 A+B Problem 本题地址:http://www.luogu.org/problem/show?pid=1001 题目描述 输入两个整数a,b,输出它们的和(|a|,|b|< ...

  7. 洛谷1303 A*B Problem 解题报告

    洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...

  8. 洛谷1601 A+B Problem(高精) 解题报告

    洛谷1601 A+B Problem(高精) 本题地址:http://www.luogu.org/problem/show?pid=1601 题目背景 无 题目描述 高精度加法,x相当于a+b pro ...

  9. 洛谷P1865 A % B Problem

    1.洛谷P1865 A % B Problem 题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行 ...

  10. 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)

    洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...

随机推荐

  1. make编译工具教程

    make编译工具教程 背景 CC++编译起来目录结构多的情况需要脚本完成搜索编译-> make 第一课 第三课 makefile常用编程语法: 1 pipe管道符号,用;把命令相连接. 这样就 ...

  2. BIP弹框内容显示的隐藏

    viewModel.on("customInit", function (data) {         // 关闭或取消关原因详情--页面初始化         viewMode ...

  3. 原创分享 HubbleDotNet 最新绿色版,服务端免安装,基于eaglet 最后V1.2.8.9版本开发,bug修正,支持一键生成同步表

    HubbleDotNet 是一个基于.net framework 的开源免费的全文搜索数据库组件.开源协议是 Apache 2.0.HubbleDotNet提供了基于SQL的全文检索接口,使用者只需会 ...

  4. 关于centos防火墙的一些问题

    防火墙有两种:firewall iptables. 两个都需要设置

  5. 解决Ubuntu下的的“system program problem detected”问题

    解决Ubuntu下的的"system program problem detected"问题 1.删除crash文件 sudo rm /var/crash/*2.关闭pop up功 ...

  6. pdf2docx:可将 PDF 转换成 docx 文件的 Python 库

    pdf2docx:https://github.com/dothinking/pdf2docx 可将 PDF 转换成 docx 文件的 Python 库. from pdf2docx import p ...

  7. java技术系列(四) 泛型

    泛型声明 有限制泛型声明方式: //确保class即表示枚举有表示Operation的子类型: private static <T extends Enum<T> & Ope ...

  8. navicat 远程连接不上mysql

    1 查看是否开启远程连接(拿root用户举例) use mysql; select host, user from user; 以上便是开启远程连接,如果依旧不能连接,参考如下: grant all ...

  9. adb 工具-原⽣安卓解决WiFi⽹络受限以及修改NTP服务

    安装包下载地址:https://developer.android.google.cn/studio/releases/platform-tools 注: adb kill-server    //结 ...

  10. Linux网络第三章:DNS服务器原理及搭建

    目录 一.DNS服务器原理 1.什么是DNS 2.DNS服务器查询过程 二.主备DNS服务器搭建 1.搭建环境 2.检查安装DNS服务 3.修改主服务器配置文件 4.修改备服务器配置文件 5.启动服务 ...