zoukankan      html  css  js  c++  java
  • 整数划分 NBUT

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

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

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    int sum, num[55];
    void dfs(int cur, int n)
    {
        if (sum == n)
        for (int i = 1; i < cur; ++i)
        {
            printf("%d%c", num[i], " 
    "[i == cur - 1]);
        }
        else
        {
            for (int i = 1; i <= n; ++i)        //遍历所有分解
            {
                if (i >= num[cur - 1])//为了字典序和不重复,加上判断
                {
                    sum += i;
                    if (sum <= n)
                    {
                        num[cur] = i;
                        dfs(cur + 1, n);    //寻找下一位
                        sum -= i;        //回溯时减去i
                    }
                    else{
                        sum -= i;        //把i这个伪因子删去
                        return;
                    }
                }
            }
        }
    }
    int main()
    {
        int n;
        while (~scanf("%d", &n))
        {
            dfs(1, n);
        }
        return 0;
    }

    1192:放苹果(搜索)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int num[20];
    int sum, ans;
    void dfs(int cur, int n, int m)
    {
        if (n == sum)
        {
            ans++;
        }
        else if (cur>m)return;
        else 
        {
            for (int i = 1; i <= n; ++i)
            {
                if (num[cur - 1] <= i)
                {
                    sum += i;
                    if (sum <= n){
                        num[cur] = i;
                        dfs(cur + 1, n, m);
                    }
                    sum -= i;
                }
            }
        }
    }
    int main()
    {
        int t,n, m;
        scanf("%d", &t);
        while (t--)
        {
            sum = ans=0;
            scanf("%d%d", &n, &m);
            dfs(1, n, m);
            printf("%d
    ", ans);
        }
    }
  • 相关阅读:
    thinkphp 框架的学习(1) 扩展配置文件
    【7】了解Bootstrap栅格系统基础案例(2)
    【6】了解Bootstrap栅格系统基础案例(1)
    【5】了解Bootstrap预置的栅格系统
    【4】创建一个自己的Bootstrap模板
    【3】Bootstrap的下载和目录结构
    【2】认识Bootstrap
    【1】Bootstrap入门引言
    css(html)背景图优化合并
    CSS2书写顺序
  • 原文地址:https://www.cnblogs.com/ALINGMAOMAO/p/10061032.html
Copyright © 2011-2022 走看看