题目很简单,把一个正整数分割成N个正整数之和。但是你得把所有的划分方法列出来,以字典序升序排序。对于每种划分方法,小的数字在前面。

思路:直接深度优先搜索,注意要判断前一位一定会比将要放入答案的因子小。这里,要设一个sum,当sum==n时,表示方案成功,应为sum在回溯的时候有用。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<iostream>
  4. using namespace std;
  5. int sum, num[];
  6. void dfs(int cur, int n)
  7. {
  8. if (sum == n)
  9. for (int i = ; i < cur; ++i)
  10. {
  11. printf("%d%c", num[i], " \n"[i == cur - ]);
  12. }
  13. else
  14. {
  15. for (int i = ; i <= n; ++i) //遍历所有分解
  16. {
  17. if (i >= num[cur - ])//为了字典序和不重复,加上判断
  18. {
  19. sum += i;
  20. if (sum <= n)
  21. {
  22. num[cur] = i;
  23. dfs(cur + , n); //寻找下一位
  24. sum -= i; //回溯时减去i
  25. }
  26. else{
  27. sum -= i; //把i这个伪因子删去
  28. return;
  29. }
  30. }
  31. }
  32. }
  33. }
  34. int main()
  35. {
  36. int n;
  37. while (~scanf("%d", &n))
  38. {
  39. dfs(, n);
  40. }
  41. return ;
  42. }

1192:放苹果(搜索)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. int num[];
  6. int sum, ans;
  7. void dfs(int cur, int n, int m)
  8. {
  9. if (n == sum)
  10. {
  11. ans++;
  12. }
  13. else if (cur>m)return;
  14. else
  15. {
  16. for (int i = ; i <= n; ++i)
  17. {
  18. if (num[cur - ] <= i)
  19. {
  20. sum += i;
  21. if (sum <= n){
  22. num[cur] = i;
  23. dfs(cur + , n, m);
  24. }
  25. sum -= i;
  26. }
  27. }
  28. }
  29. }
  30. int main()
  31. {
  32. int t,n, m;
  33. scanf("%d", &t);
  34. while (t--)
  35. {
  36. sum = ans=;
  37. scanf("%d%d", &n, &m);
  38. dfs(, n, m);
  39. printf("%d\n", ans);
  40. }
  41. }

整数划分 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. [51nod1514] 美妙的序列

    Description 如果对于一个 \(1\sim n\) 的排列满足: 在 \(1\sim n-1\) 这些位置之后将序列断开,使得总可以从右边找一个数,使得该数不会比左边所有数都大,则称该序列是 ...

  2. epoll的高效实现原理

    epoll的高效实现原理 原文地址:http://blog.chinaunix.net/space.php?uid=26423908&do=blog&id=3058905 开发高性能网 ...

  3. java命令运行带包的类

    类文件d:\test2.java package b; public class test2 {    public static void main(String[] args) {         ...

  4. IOS 获取的时间显示为NAN 解决方法

    var regTime= item.BeginDate.replace(/\-/g, "/"); ------ item.BeginDate 我的日期年月日的    (/\-/g, ...

  5. ECMAScript 引用类型

    Object对象 新建对象 var obj = new Object() var obj ={} var obj={age:23} ... hasOwnProperty(property) 方法 va ...

  6. 如何将一个HTML页面嵌套在另一个页面中

    一 在原页面嵌入其他页面 1.使用iframe框架 客户端页面嵌套可以使用iframe的方法,弊端是必须事先想好被嵌套的页面在首页中要占多大的位置. 如果被嵌套页面太大,超过事先定义的宽度或高度,则首 ...

  7. 【转】Win10年度更新开发必备:VS2015 Update 3正式版下载汇总

    微软在06月27日发布了Visual Studio 2015 Update 3 .在MSDN中微软也提供下载,而且MSDN的Visual Studio 2015 Update 3与官方免费下载的文件是 ...

  8. Strust2框架笔记01_XML配置_action编写

    目录 1.Struts2概述 1.1 什么是Struts2 1.2 Web层框架基于前端控制器模型设计 2. Struts2入门案例 2.1 Struts2的开发环境 2.2 解压开发包 2.3 创建 ...

  9. jQuery:SP.NET Autocomplete Textbox Using jQuery, JSON and AJAX

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="jQueryAutocomp ...

  10. 部署Redis(脚本安装)

    部署Redis(脚本安装) #/bin/bash # DES:Redis Deploy # Author: will_xue # Email:linuxcto@aliyun.com # DATE : ...