题目很简单,把一个正整数分割成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的更多相关文章

  1. 51nod p1201 整数划分

    1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2, ...

  2. 2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)

    这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在Coursera中评测通过的,没有找到适合的OJ有这一道题(找到的ACMer拜托告诉一声~),这道题考察得较全 ...

  3. 整数划分 (区间DP)

    整数划分(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...

  4. nyoj 90 整数划分

    点击打开链接 整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk,  其中n1≥n2≥-≥nk≥1,k≥ ...

  5. 整数划分 Integer Partition(二)

    本文是整数划分的第二节,主要介绍整数划分的一些性质. 一 先来弥补一下上一篇文章的遗留问题:要求我们所取的 (n=m1+m2+...+mi )中  m1 m2 ... mi连续,比如5=1+4就不符合 ...

  6. 整数划分 Integer Partition(一)

    话说今天百度面试,可能是由于我表现的不太好,面试官显得有点不耐烦,说话的语气也很具有嘲讽的意思,搞得我有点不爽.Whatever,面试中有问到整数划分问题,回答这个问题过程中被面试官搞的不胜其烦,最后 ...

  7. 51nod1201 整数划分

    01背包显然超时.然后就是一道神dp了.dp[i][j]表示j个数组成i的方案数.O(nsqrt(n)) #include<cstdio> #include<cstring> ...

  8. NYOJ-571 整数划分(三)

    此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重 ...

  9. BZOJ1263: [SCOI2006]整数划分

    1263: [SCOI2006]整数划分 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 677  Solved: 332[Submit][Status] ...

随机推荐

  1. spring boot(一):Hello World

    前言 作为程序员,不管是.net程序员还是java程序员其实从骨子里都不太喜欢各种配置文件的,记得刚开始学java SSH时动不动就装B,来看看我的配置多不多,又是从.net开始写java的程序员提起 ...

  2. Fibonacci快速实现(优化)

    斐波那契数列的通俗解法是利用递推公式进行递归求解,我们可以更优化的去解决它. 方法一:通项公式 斐波那契数列的递推公式是f(n)=f(n-1)+f(n-2),特征方程为:x2=x+1,解该方程得(1+ ...

  3. 操作Linux系统环境变量的几种方法

    一.使用environ指针输出环境变量 代码如下: #include<stdio.h> #include<string.h> #define MAX_INPUT 20 /* 引 ...

  4. Django学习(6)配置静态文件

      本文将详细讲述如何在Django中配置静态文件,如图片(images),JavaScript,CSS等.   我们将要实现的网页如下: 当按下按钮"Change Text"时, ...

  5. LeetCode算法笔记目录

    贪心算法: LeetCode翻转矩阵后的得分-Python3<六> LeetCode根据身高重建队列-Python3<七> LeetCode 任务调度器-Python3< ...

  6. C#中构造函数的定义

    C#构造函数是在创建给定类型的对象时执行的类方法.构造函数具有与类相同的名称,它通常初始化新对象的数据成员.不带参数的构造函数称为"默认构造函数". 无论何时,只要使用 new 运 ...

  7. 在WindowsPhone开发中使用MVVM设计模式

    相信.NET程序员多多少少都听说过MVVM的设计模式,对于一个大一点的项目来说,使用这种设计模式无疑是一种不错的选择, 它提高了程序的可维护性,降低了耦合度,可以实现代码的重用,方便独立开发和进行测试 ...

  8. HDU6215

    Brute Force Sorting Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  9. js之搜索框

    目标效果:点击搜索框,搜索框内提示信息消失,可输入搜索信息,点击搜索框外搜索框如果没提示信息或者为空时,显示搜索框提示信息,如果有搜索信息,显示搜索信息. 代码如下: <!DOCTYPE htm ...

  10. 2017-12-26 Java关键字的汉化用词探讨

    @狗屎咖啡 的为GCC添加中文关键字项目对C关键词进行了汉化. 风格比较简约, 如'if'-如, 'else'-另. 个人感觉在中文编程语言尚未成熟之时, 不妨集思广益, 首先列出一些可选项, 然后从 ...