整数划分 NBUT - 1046
题目很简单,把一个正整数分割成N个正整数之和。但是你得把所有的划分方法列出来,以字典序升序排序。对于每种划分方法,小的数字在前面。
思路:直接深度优先搜索,注意要判断前一位一定会比将要放入答案的因子小。这里,要设一个sum,当sum==n时,表示方案成功,应为sum在回溯的时候有用。
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int sum, num[];
void dfs(int cur, int n)
{
if (sum == n)
for (int i = ; i < cur; ++i)
{
printf("%d%c", num[i], " \n"[i == cur - ]);
}
else
{
for (int i = ; i <= n; ++i) //遍历所有分解
{
if (i >= num[cur - ])//为了字典序和不重复,加上判断
{
sum += i;
if (sum <= n)
{
num[cur] = i;
dfs(cur + , n); //寻找下一位
sum -= i; //回溯时减去i
}
else{
sum -= i; //把i这个伪因子删去
return;
}
}
}
}
}
int main()
{
int n;
while (~scanf("%d", &n))
{
dfs(, n);
}
return ;
}
1192:放苹果(搜索)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int num[];
int sum, ans;
void dfs(int cur, int n, int m)
{
if (n == sum)
{
ans++;
}
else if (cur>m)return;
else
{
for (int i = ; i <= n; ++i)
{
if (num[cur - ] <= i)
{
sum += i;
if (sum <= n){
num[cur] = i;
dfs(cur + , n, m);
}
sum -= i;
}
}
}
}
int main()
{
int t,n, m;
scanf("%d", &t);
while (t--)
{
sum = ans=;
scanf("%d%d", &n, &m);
dfs(, n, m);
printf("%d\n", ans);
}
}
整数划分 NBUT - 1046的更多相关文章
- 51nod p1201 整数划分
1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2, ...
- 2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)
这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在Coursera中评测通过的,没有找到适合的OJ有这一道题(找到的ACMer拜托告诉一声~),这道题考察得较全 ...
- 整数划分 (区间DP)
整数划分(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...
- nyoj 90 整数划分
点击打开链接 整数划分 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk, 其中n1≥n2≥-≥nk≥1,k≥ ...
- 整数划分 Integer Partition(二)
本文是整数划分的第二节,主要介绍整数划分的一些性质. 一 先来弥补一下上一篇文章的遗留问题:要求我们所取的 (n=m1+m2+...+mi )中 m1 m2 ... mi连续,比如5=1+4就不符合 ...
- 整数划分 Integer Partition(一)
话说今天百度面试,可能是由于我表现的不太好,面试官显得有点不耐烦,说话的语气也很具有嘲讽的意思,搞得我有点不爽.Whatever,面试中有问到整数划分问题,回答这个问题过程中被面试官搞的不胜其烦,最后 ...
- 51nod1201 整数划分
01背包显然超时.然后就是一道神dp了.dp[i][j]表示j个数组成i的方案数.O(nsqrt(n)) #include<cstdio> #include<cstring> ...
- NYOJ-571 整数划分(三)
此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重 ...
- BZOJ1263: [SCOI2006]整数划分
1263: [SCOI2006]整数划分 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 677 Solved: 332[Submit][Status] ...
随机推荐
- 偏流角(Draft Angle)在等距螺旋中的作用
劳动改变人,思维改变世界.我们可以接着聊螺旋线了. 在飞行程序设计中,偏流角(Draft Angle简写为DA)通常指得是受侧风影响航向偏移的最大角度.用速度向量来表示时,是图1中的三角形关系: 图1 ...
- 浅谈MemCahe
MemCahe 首先介绍下memcahce的定义:是一个分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访问数据库的网站访问速度提升效果十分显著. 接下来介绍 ...
- PowerDesigner连接SqlServer数据库导出表结构
环境:PowerDesigner15 数据库sql server 2005 第一步.打开PowerDesigner ,建立一个物理数据模型,具体如下图: 第二步.新建成功之后,点击"Data ...
- angularjs通过ng-change和watch两种方式实现对表单输入改变的监控
angularjs通过ng-change和watch两种方式实现对表单输入改变的监控 直接上练习代码 <!DOCTYPE html> <html xmlns="http:/ ...
- JS通过百度地图API获取当前定位信息
$(function(){ var latlon=null; //ajax获取用户所在经纬度 $.ajax({ url:"http://api.map.baidu.com/location/ ...
- C#设计模式——简单工厂模式、工厂模式和抽象工厂模式
一:简单工厂模式 1:描述:简单工厂模式是由一个工厂对象根据接收到的消息决定要创建哪一个类的对象事例. 2:优点:工厂类中有相关逻辑判断,可以根据需要动态创建相关的对象事例,而客户端只需要告诉工厂类创 ...
- Java 10新特性
ref:http://www.cocoachina.com/industry/20180309/22520.html https://www.oschina.net/news/94402/java-1 ...
- blfs(systemd版本)学习笔记-安装lrzsz软件包实现ssh远程传输文件到lfs系统
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 安装lrzsz软件包实现ssh远程传输文件到lfs系统 这个软件包在lfs系列的书中没有,这里是参照lrzsz官网的说明进行编译 ...
- js 中导出excel 较长数字串会变成科学计数法
在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串转换成 科学计数法.现在网上找到解决方案之一: (在数字串 ...
- vue2.0 element-ui中el-upload的before-upload方法返回false时submit()不生效解决方法
我要实现的功能是在上传文件之前校验是否表格中存在重复的数据,有的话,需要弹窗提示是否覆盖,确认之后继续上传,取消之后,就不再上传. 项目中用的element-ui是V1.4.3 <el-uplo ...