洛谷 P1832 A+B Problem(再升级)题解
START:
2021-08-09
15:28:07
题目链接:
https://www.luogu.com.cn/problem/P1832
给定一个正整数n,求将其分解成若干个素数之和的方案总数。
输入格式
一行:一个正整数n
输出格式
一行:一个整数表示方案总数
输入输出样例
7
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(再升级)题解的更多相关文章
- 洛谷——P1832 A+B Problem(再升级)
P1832 A+B Problem(再升级) 题目背景 ·题目名称是吸引你点进来的 ·实际上该题还是很水的 题目描述 ·1+1=? 显然是2 ·a+b=? 1001回看不谢 ·哥德巴赫猜想 似乎已呈泛 ...
- 洛谷P1832 A+B Problem(再升级) [2017年4月计划 动态规划03]
P1832 A+B Problem(再升级) 题目背景 ·题目名称是吸引你点进来的 ·实际上该题还是很水的 题目描述 ·1+1=? 显然是2 ·a+b=? 1001回看不谢 ·哥德巴赫猜想 似乎已呈泛 ...
- 洛谷P1832 A+B Problem(再升级) 题解 完全背包方案计数
题目链接:https://www.luogu.com.cn/problem/P1832 题目大意: 给定一个正整数n,求将其分解成若干个素数之和的方案总数. 解题思路: 首先找到所有 \(\le n\ ...
- 洛谷P1832 A+B Problem(再升级)
放题解 题目传送门 放代码 #include<bits/stdc++.h> using namespace std; ];//n为被分解数 a数组用于存储素数 ];//dp数组用于存储方案 ...
- 洛谷 P1832 A+B Problem(再升级)
题目背景 ·题目名称是吸引你点进来的 ·实际上该题还是很水的 题目描述 ·1+1=? 显然是2 ·a+b=? 1001回看不谢 ·哥德巴赫猜想 似乎已呈泛滥趋势 ·以上纯属个人吐槽 ·给定一个正整数n ...
- 洛谷1001 A+B Problem
洛谷1001 A+B Problem 本题地址:http://www.luogu.org/problem/show?pid=1001 题目描述 输入两个整数a,b,输出它们的和(|a|,|b|< ...
- 洛谷1303 A*B Problem 解题报告
洛谷1303 A*B Problem 本题地址:http://www.luogu.org/problem/show?pid=1303 题目描述 求两数的积. 输入输出格式 输入格式: 两个数 输出格式 ...
- 洛谷1601 A+B Problem(高精) 解题报告
洛谷1601 A+B Problem(高精) 本题地址:http://www.luogu.org/problem/show?pid=1601 题目背景 无 题目描述 高精度加法,x相当于a+b pro ...
- 洛谷P1865 A % B Problem
1.洛谷P1865 A % B Problem 题目背景 题目名称是吸引你点进来的 实际上该题还是很水的 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m 接下来n行 ...
- 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)
洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...
随机推荐
- C# 当页面有很多选择条件时的处理方式
如下图,用户可能输入很多条件 在后端的处理方式: 使用键值对 private Dictionary<string, string> CreatSearchPara() { Dictiona ...
- Webrtc audio
整体理解 在 WebRTC 中,Call 是peer connection 的. 为 WebRTC Call 注入的 AudioState 来自于全局的 MediaEngine 的 VoiceEngi ...
- centos7.6 dokcer-compose在线和离线安装
在线安装可参考官网文档:https://docs.docker.com/compose/install/#install-compose curl -SL https://github.com/doc ...
- ts的装饰器
console.log('装饰器.......') // 装饰器就是一个方法,可以注入到类,方法,属性上来拓展类,属性,方法,参数的功能 // 常见:类装饰器,属性装饰器,方法装饰器,参数装饰器 // ...
- 用dig或nslookup命令查询txt解析记录
这几天想把HTTPS装上,阿里云的免费证书需要在域名解析的地方添加TXT记录.文档里用的是dig命令,我本地装了nslookup.试验下如何用咯. dig命令 dig用法很多,这里只使用dig txt ...
- flutter卡在Running Gradle task 'assembleDebug'...
https://www.cnblogs.com/lovewhatIlove/p/16323828.html
- MogDB 学习笔记之 -- truncate 属于dml语句
# 概念描述验证create 语句.alter 语句.truncate语句.drop语句 是属于ddl 还是dml # 测试验证 1.环境准备 ```修改log_statement 参数miao=# ...
- 6. C语言bool类型
C89没有定义布尔类型,所以C语⾔判断真假时以0为假,⾮0为真.所以我们通常使⽤逻辑变量的做法: 1 //宏定义布尔类型 2 3 #define BOOL int 4 5 #define TRUE 1 ...
- 上传镜像到harbor
https://blog.csdn.net/weixin_45335305/article/details/123817541
- 前端将JSON数据格式化显示
很简单 1 formatJsonData(jsonData) { 2 var smapleDetailData = JSON.stringify(JSON.parse(jsonData), null, ...