1. 程式人生 > >[演算法]整數劃分問題

[演算法]整數劃分問題

整數劃分是一個經典的問題。希望這道題會對你的組合數學的解題能力有所幫助。

Input

每組輸入是兩個整數n和k。(1 <= n <= 50, 1 <= k <= n)

Output

對於每組輸入,請輸出六行。

第一行: 將n劃分成若干正整數之和的劃分數。
第二行: 將n劃分成k個正整數之和的劃分數。
第三行: 將n劃分成最大數不超過k的劃分數。
第四行: 將n劃分成若干奇正整數之和的劃分數。
第五行: 將n劃分成若干不同整數之和的劃分數。
第六行: 列印一個空行。

Hint:

將5劃分成若干正整數之和的劃分為: 5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1
將5劃分成2個正整數之和的劃分為: 3+2, 4+1
將5劃分成最大數不超過2的劃分為: 1+1+1+1+1, 1+1+1+2, 1+2+2
將5劃分成若干奇正整數之和的劃分為: 5, 1+1+3, 1+1+1+1+1
將5劃分成若干不同整數之和的劃分為: 5, 1+4, 2+3

相關推薦

0002演算法--------整數劃分問題演算法分析及JAVA程式碼完美實現

整數劃分演算法分析以及JAVA程式碼完美實現 一、問題描述 整數劃分:將正整數n表示成一系列正整數只和,n = n1 + n2 + …… + nk,其中n1 >= n2 >= nk &g

[演算法]整數劃分問題

整數劃分是一個經典的問題。希望這道題會對你的組合數學的解題能力有所幫助。 Input 每組輸入是兩個整數n和k。(1 <= n <= 50, 1 <= k <= n) Output 對於每組輸入,請輸出六行。 第一行: 將n劃分成若干正整數之和的劃分數

基本演算法整數劃分

#include <stdio.h> int main() {  int s, i, j, k, t, u;  static int a[21][800][21];  printf("input s(s<=20):"); scanf_s("%d", &s);  a[2][

整數劃分的非遞迴演算法(C語言)

記錄點滴成長: 整數劃分的非遞迴演算法 例如將整數6劃分為如下: 65 14 2 4 1 13 3 3 2 1 3 1 1 12 2 2 2 2 1 1 2 1 1 1 11 1 1 1 1 1如6有11個劃分。 #include "stdio.h"void  Div

整數劃分問題的動態規劃演算法

/* Name: 整數劃分問題 Copyright: Author: 巧若拙 Date: 06-04-17 09:02 Description: 整數劃分問題是演算法中的一個經典命題之一,有關這個問題的講述在講解到遞迴時基本都將涉及。 所謂整數劃

演算法設計:整數劃分

// 將一個正整數n表示成一系列正整數之和, // n = n1 + n2 + ... + nk ( 其中, n1 >= n2 >= ... >= nk , k >= 1 ) // 正整數n的一個這種表示稱為正整數n的一個劃分。 // 正整數n的不同的

整數劃分演算法實現 分治策略

將正整數n表示成一系列正整數之和。 正整數n的這種表示成為正整數n的劃分。 正整數n的不同的劃分個數成為正整數n的劃分數。 int q(int n,int m){ if((n<1)||(m&

演算法作業——整數劃分

問題描述:輸入一個不小於 10 的整數,輸出其所有整數劃分。 程式碼: #include "pch.h" #include <stdio.h> int mark[100]; int n; int num = 0; void divide(int now, i

演算法作業-整數劃分-遞迴

正整數的劃分問題是將一個正整數n表示成一系列正整數之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。請編寫至少三種不同的求解演算法,並對所編寫演算法的時間效率進行測試和比較。解法一:遞迴演算法考慮增加一個自變數:將最大加數n1不大於m的劃分個數記作q(n,

整數劃分問題(遞迴演算法)

int q (int n, int m, int *out, int length){ if(n<1||m<1)  return 0; if(n==1||m==1) {  if(n==1)   {   out[length] = n;   print(out, length+1);  }   el

整數劃分的遞迴實現演算法

輸入:輸入整數劃分的整數(只輸入一次,即n==m)。 輸出:輸入整數的劃分個數值。 示例:輸入:7,輸出:15 q(n,m)的如下遞迴關係定義如下: 正整數n的劃分數p(n)=q(n,n)。

演算法--正整數劃分

//.7.正整數劃分問題 #if 0 int Func(int n,int m) { if((n<1)||(m<1)) return 0; if((n==1)||(m==1)) retur

演算法(1)整數劃分問題之遞迴解決

  今日,閱讀《ACM/ICPC 演算法訓練》時,發現一道名為“整數劃分”的題,書上解釋極為模糊,自己研究了一下此題,將其解決,記錄下解題思路,以備以後有用時快速理解;   一,題意簡述   將整數表示成一系列正整數之和:n=n1+n2+.....+nk;   注意:4+2

演算法作業-整數劃分-母函式

正整數的劃分問題是將一個正整數n表示成一系列正整數之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。請編寫至少三種不同的求解演算法,並對所編寫演算法的時間效率進行測試和比較。解法一:遞迴演算法解法三:母函式演算法,xmk表示劃分中包含了m個k的情況。正整數

整數劃分問題的遞迴演算法-c語言

整數劃分問題是演算法中的一個經典命題之一,有關這個問題的講述在講解到遞迴時基本都將涉及。所謂整數劃分,是指把一個正整數n寫成如下形式:        n=m1+m2+...+mi; (其中mi為正整數,並且1 <= mi <= n),則{m1,m2,...,

(dp)openjudge 復雜的整數劃分問題

con fin can == names 劃分數 algorithm 系列 問題 將正整數n 表示成一系列正整數之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整數n 的這種表示稱為正整數n 的劃分。

整數劃分問題(二)

pro col void ++ cal -c 一行 測試 不同的 總時間限制:200ms內存限制:65536kB描述 將正整數n 表示成一系列正整數之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 。正整數n

整數劃分問題

區別 不同 style back blog 表示 n-1 由於 思路 1.將n個不同的數字組成的集合劃分成若幹個元素和不大於m的集合: 1).若是劃分多個可重復整數: dp[n][m]= dp[n][m-1]+ dp[n-m][m] dp[n][m]表示

51nod 1201 整數劃分 dp

bit eps 不同的 color quest stream 空間 output lac 1201 整數劃分 基準時間限制:1 秒 空間限制:131072 KB 收藏 關註 將N分為若幹個不同整數的和,有多少種不同的劃分方式,例如:

動態規劃_百煉 4117 簡單的整數劃分問題

出口 sta pre color 劃分 stack 大於 iostream 規劃 1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <math.h> 4