1. 程式人生 > >nyoj 整數劃分(一)(二)

nyoj 整數劃分(一)(二)

先來談談寫這兩道題的感受,整數劃分(一)剛開始做這道題,dp和遞迴都不會寫,是用深搜寫的,不過用深搜寫

整數劃分(二)就不行了,鐵定超時。

昨晚和今晚終於把這兩道題的遞迴和dp全看懂了(看別人部落格-_-|||),在這兒重述一下,別人的部落格都寫得不是太

明白,看了好幾遍看不懂,自己又手推好幾遍,終於懂了。

先說整數劃分(二)

題目:把一個正整數m分成n個正整數的和,有多少種分法?

1.遞迴,比如將7劃分為3個正整數的和,肯定是1,1,5  1,2,4 ,1,3,3,       2,2,3;

這裡分成兩部分,一部分是包含1,即1,1,5, 1,2,4  1,3,3裡面都有1,因此可以劃分成1,5,  2,4   3,3(把1除掉) 另一

部分是不包含1,即2,2,3 ,可以將2,2,3分別減去1,即1,1,2,因此遞迴式就出來了,

digui(7,3)=digui(6,2)+digui(4,3);  

即digui(m,n)=digui(m-1,n-1)+digui(m-n,n);

考慮到若n=1,或者m=n,肯定為1,同時若m<n,肯定不存在,故if(n==1||m==n) return 1; if(m<n) return 0;

因此程式碼:

01.#include<stdio.h> 02.#include<string.h> 03.int digui(int m,
int n)
04.{ 05.if(n==1||n==m) 06.return 1; 07.else if(m<n) 08.return 0; 09.else 10.return (digui(m-1,n-1)+digui(m-n,n)); 11.} 12.int main() 13.{ 14.int N,n,m; 15.scanf("%d",&N); 16.while(N--) 17.{ 18.scanf("%d%d",&m,&n);

相關推薦

nyoj 整數劃分

先來談談寫這兩道題的感受,整數劃分(一)剛開始做這道題,dp和遞迴都不會寫,是用深搜寫的,不過用深搜寫 整數劃分(二)就不行了,鐵定超時。 昨晚和今晚終於把這兩道題的遞迴和dp全看懂了(看別人部

nyoj 整數劃分 90 母函式

整數劃分 時間限制:3000 ms  |           記憶體限制:65535 KB 難度:3 描述 將正整數n表示成一系列正整數之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1。 正整數n的這種表示稱為正整數n的劃分。求正整數n的不

NYOJ 整數劃分 (區間dp)

題意:給出兩個整數 n , m ,要求在 n 中加入m - 1 個乘號,將n分成m段,求出這m段的最大乘積思路:區間dp,我們需要先預處理出第i位到第j位可以湊成的數sum[i][j],之後dp[i][j]表示你在第i個數字添加了j個乘號時的最大值,那麼dp[i][j] =m

三階幻方維表維進行深搜列舉

三階幻方 時限:1000ms 記憶體限制:10000K 總時限:3000ms 描述: 三階幻方是最簡單的幻方,又叫九宮格,是由1,2,3,4,5,6,7,8,9九個數字組成的一個三行三列的矩陣,其對角線、橫行、縱向的的和都為15。 輸入: 無 輸出:

有限狀態機FSM寫法的個人總結段式,段式,三段式

      狀態機描述時關鍵是要描述清楚幾個狀態機的要素,即如何進行狀態轉移,每個狀態的輸出是什麼,狀態轉移的條件等。具體描述時方法各種各樣,最常見的有三種描述方式:      (1)一段式:整個狀態機寫到一個always模組裡面,在該模組中既描述狀態轉移,又描述狀態的輸入

C語言輸出一個整數的每演算法優化

/最簡易的方法; //#include<stdio.h> //#include<stdlib.h> // 輸出整數的每一位; //void play(int n) // 建立函式來實現 //{ // if (n &

指標與陣列的關係維、

一、指標和一維陣列間的關係 前提條件: int a[10];//元素個數隨意自己定 int *p = a;//定義指標時直接初始化,也可以分為兩步:int *p; p=a; 第i個元素的地址: &am

陣列維、維、多維與指標的關係與區別總結

陣列用於同種資料型別的儲存,常規的陣列選取的是一塊連續記憶體空間來儲存同種型別的資料。1、  靜態陣列靜態陣列是在宣告時已經確定子陣列大小的陣列,即陣列元素的個數固定不變。在編譯期間在棧中分配好記憶體的陣列,在執行期間不能改變儲存空間,執行後由系統自動釋放。陣列的宣告int

C++陣列維、維、三維的動態分配new、初始化memset和釋放delete

【原文】http://blog.csdn.net/shanzhizi/article/details/7835752 陣列的動態分配、初始化和釋放經常用到,這裡總結一下,尤其是二維陣列 一維陣列 一維陣列的動態分配,初始化和撤銷都好說,幾乎每一本C++教材都會做出詳細的說明

整數劃分問題經典解法有用

經典的dp! 有N多情況的整數劃分,下面就幾種這幾天學習的分別說一下: 1. 數n的劃分中,其最大值不能大於k:記其結果為f(n, k),那麼, 狀態轉移方程:當 n == 1 || k == 1 時,f(n, k) == 1, n為1,那麼只能為1; 而k為1,那麼

HDU 5983-Pocket Cube步還原階魔方

The first line of input contains one integer N(N ≤ 30) which is the number of test cases. For each test case, the first line describes the top face of the

步教你寫股票走勢圖——K線圖五高亮聯動

Bug分析: 之前我們長按移動上面圖表的高亮時,下面柱狀圖的高亮顯示是正常的,但是,我們長按柱狀圖高亮時,bug就來了,上面的圖表很傲嬌啊,高亮壓根不顯示,我們還是看一下之前的效果圖: Bug解決: 還好這位chenguang79的

ios切圖倍圖+倍圖+三倍圖

工作中,一直做移動端app(不包括ios和ipad),所以對一些手機端的比較熟悉,但沒做過ipad端的,今天工作中正好有碰到一個ipad設計(效果圖+切圖),剛開始以為和手機端一樣,但做的過程中發現還是有不一樣的地方,比如常識性的切圖(一倍圖,@2x,@3x),我開始以為只要

To the Max 維dp維的變形

hole may b- separate 轉化 ima first lin con Description Given a two-dimensional array of positive and negative integers, a sub-rectangl

Oracle 10g 10.2.0.1 在Oracle Linux 5.4 32Bit RAC安裝手冊抹曦陽

oracl track microsoft sun msu ica http net ref Oracle 10g 10.2.0.1 在Oracle Linux 5.4 32Bit RAC安裝手冊(一抹曦陽).pdf下載地址 ,step by step

LeetCode 59. Spiral Matrix II 螺旋矩陣之

question hms 參考 ger should rate spa 條件 日期 Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order

使用SLF4J和LOGBACK : 基本使用

asi 個人 fig 接口實現 pac 再次 intro 級別 多說 1.SLF4J是什麽? slf4j是一個日誌門面,它不是具體的日誌實現框架,而是提供了通用的日誌接口,按個人理解來說,是通過接口實現多態,來滿足應用在不同日誌框架間切換的需求。 例如在程序中我們需要記錄

JAVA學習路線圖文詳解

-h 基礎 tex 蝸牛 學習路線 jdbc sql https ase 此乃是java攻城獅的學習路線圖,由簡到繁,由易到難,一步步的學習,最後成為JAVA攻城獅。 階段1 1:學習HTML 2:學習CSS 3:JavaScript

LeetCode 90. Subsets II 子集合之

blank public fun res 東北 cau 利用 租房 .so Given a collection of integers that might contain duplicates, nums, return all possible subsets. N

數組維數組

while 元素 同學 -1 eve res ear set span 一維數組的聲明和賦值 1 //聲明數組 2 //string[] nameArr=null; 3 //nameArr = new string