【菜鸟er】经典题目_划分整数

原创 2018年04月15日 17:58:06
#include <bits/stdc++.h>
using namespace std;
#define MAX_N 400
int dp[MAX_N][MAX_N];
int part_sum(int ,int );//输出种数
int part_print(int,int,int,int sec[],int);
int max_part;
int sec[MAX_N];
int main()
{
    int n,m;
    cin>>n>>m;
    cout<<"1:递归"<<endl;
    int sum = part_sum(n,m);
    cout<<sum<<endl;


    cout<<"2:DP"<<endl;
    int ndp=n,mdp=m;
    for(int i = 0;i<=100;i++){
        for(int j = 0;j<=100;j++)
            dp[i][j] = 0;
            dp[i][1] = 1;
    }
    dp[0][0]=1,dp[0][1]=1,dp[1][0]=1,dp[1][1]=1;
    for(int n = 2;n<=ndp;n++){
        for(int m = 1;m<=n;m++){
            if(n-m<=m){
                dp[n][m] = dp[n][m-1] + dp[n-m][n-m];
            }
            else{
                dp[n][m] = dp[n][m-1] + dp[n-m][m];
            }
        }
    }
    cout<<dp[ndp][mdp]<<endl;


    cout<<"3.可输出表达式的递归:"<<endl;
    max_part = m;


    for(int i = 1;i<=m;i++){
        cout<<"种数:"<<part_print(n,i,1,sec,0)<<endl;
    }


    return 0;
}


int part_sum(int n,int k)
{
    if(k == 1) return 1;
    else if(k >  n) return part_sum(n,n);
    else if(k == n) return (part_sum(n,k-1) +1 );//这一种是 n = n;
    else if(k <  n) return (part_sum(n,k-1) + part_sum(n-k,k) );
}


int part_print(int n,int m,int start,int sec[MAX_N],int index)
{
    //n:整数,m:分成m份 start:从start开始分类 数组sec[]:存储分类的情况  index:数组下标,从0开始


    if(m == 1){
        sec[index] = n;
        for(int i = 0;sec[i]!=0;i++){
            cout<<sec[i]<<" ";
        }
        cout<<endl;
        return 1;
     }
     int sum = 0;


     for(int i = start;i<=n/m;i++){
        sec[index] = i;
        sum = sum + part_print(n-i,m-1,i,sec,index+1);
     }
     return sum;
}

数据库sql题目讲解

通过5个面试题的讲解,教会大家等值关联,分组查询,行转列,列转行,日期转换、自定义函数,执行计划分析,组内排序,函数的嵌套使用
  • 2017年04月09日 22:26

动态规划DP问题分类和经典题型

解题关键: 理解结构特征,抽象出状态,写成状态转移方程。 动态规划理念: 1.最优化原理    1951年美国数学家R.Bellman等人,根据一类多阶段问题的特点,把多阶...
  • u010398493
  • u010398493
  • 2016-10-13 20:48:50
  • 6461

100 条经典C语言笔试题目

100 条经典C语言笔试题目 题目来源: 1、中兴、华为、慧通、英华达、微软亚洲技术中心等中 外企业面试题目; 2、C 语言面试宝典(林锐《高质量编程第三版》)。 说明: 1、...
  • ycdhonker
  • ycdhonker
  • 2014-10-15 21:35:12
  • 1761

菜鸟面试题收集

1.谈谈final, finally, finalize的区别。 final:修饰符(关键字)如果一个类被final修饰,意味着他不能再派生出新的子类,不能作为父类被继承。因此一个类不能即被声明成ab...
  • duyuehan
  • duyuehan
  • 2016-04-17 23:01:43
  • 313

面试题目之单链表的反转

struct node { int data; struct node *next; }; typedef struct node ListNode; typedef ListNode...
  • u014744118
  • u014744118
  • 2016-02-22 15:53:19
  • 804

【菜鸟er】经典题目_逆波兰表示法

#include &amp;lt;bits/stdc++.h&amp;gt; using namespace std; /**写在前面: 对于所有容器,属性判断一定要放在操作判断的前面 ...
  • F_zmmfs
  • F_zmmfs
  • 2018-04-15 18:14:03
  • 6

Python从菜鸟到大神的100道经典练习题

  • 2017年06月16日 14:07
  • 901KB
  • 下载

python题目-----python七个经典问题

python七个经典问题
  • x_r_su
  • x_r_su
  • 2017-01-19 19:04:16
  • 1636

动态规划总结与题目分类

源博客链接:http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算...
  • eagle_or_snail
  • eagle_or_snail
  • 2016-03-26 15:22:18
  • 16520

蓝桥杯中的整数划分问题

题目内容: 对于一个正整数n的划分,就是把n变成一系列正整数之和的表达式。注意,分划与顺序无关,例如6= 5+1.跟6=1+5是同一种分划,另外,这个整数本身也是一种分划。 例如:,对于正整数n...
  • u010464679
  • u010464679
  • 2014-10-06 15:52:11
  • 1082
收藏助手
不良信息举报
您举报文章:【菜鸟er】经典题目_划分整数
举报原因:
原因补充:

(最多只允许输入30个字)