整數劃分(一)
對於一個正整數n的劃分,就是把n變成一系列正整數之和的表示式。
注意,分劃與順序無關,例如6=5+1跟6=1+5是同一種分劃。
另外,單獨這個整數本身也算一種分劃。
例如:對於正整數n=5,可以劃分為:
1+1+1+1+1
1+1+1+2
1+1+3
1+2+2
2+3
1+4
5
輸入描述
輸入一個正整數n
輸出描述
輸出n整數劃分的總數k
輸入樣例
5
輸出樣例
7
程式碼:
#include "stdio.h"
int fun(int a, int b){
if(a==1||b==1)
return 1;
else if(a<1||b<1)
return 0;
else if(a==b)
return 1+fun(a,b-1);
else if(a>b)
return fun(a-b,b)+fun(a,b-1);
else
return fun(a,a);
}
int main(){
int n,k;
scanf("%d",&n);
k=fun(n,n);
printf("%d",k);
return 0;
}
相關推薦
nyoj 整數劃分(一)(二)
先來談談寫這兩道題的感受,整數劃分(一)剛開始做這道題,dp和遞迴都不會寫,是用深搜寫的,不過用深搜寫 整數劃分(二)就不行了,鐵定超時。 昨晚和今晚終於把這兩道題的遞迴和dp全看懂了(看別人部
整數劃分(一)
題目內容: 對於一個正整數n的劃分,就是把n變成一系列正整數之和的表示式。 注意,分劃與順序無關,例如6=5+1跟6=1+5是同一種分劃。 另外,單獨這個整數本身也算一種分劃。 例如:對於正整數n=5,可以劃分為: 1+1+1+1+1 1+1+1+2 1+1+3 1+2+2
JVM的內存區域劃分(一)
頂部 技術分享 計數 棧幀 指向 劃分 png 運行時 操作數棧 (一)包含了哪幾個部分? ①棧內存:每個線程私有。java方法執行的內存模型。java棧中存放的是一個個棧幀,每一個幀對應一個被調用的方法。棧幀包裹局部變量表、操作數棧、指向運行時常量的引用、方法返回地址、附
51Nod 1201 - 整數劃分(DP)
【題目描述】 【思路】 d p [ i
3641. 整數劃分(構造)
試將 1 到 n 這 n 個正整數分成三份,使得這三份的和相等。 Input 輸入一個正整數 n (1≤n≤2⋅105)。 Output 輸出 n 個正整數 k1,k2,…,kn (1≤ki≤3),用空格隔開。ki 表示要把 i 這個整數分在第幾組。 如果有多解輸出
nyoj_176_整數劃分(二)_201404261715
1 #include <stdio.h> 2 int f(int m,int n) 3 { 4 if(m==n||n==1) 5 return 1; 6 else if(m<n) 7 return 0; 8 else
NYOJ 746 整數劃分(四)區間DP
/* 區間dp,設dp[i][j] 表示在區間[0, i]之中,插入j個乘號可以得到的最大數 設a[i][j]為區間[i,j]所形成的數 所以 dp[i][j] = max(dp[k][j-1] * a[k + 1][i]) 注意數的範圍,用int不夠 */ #include <cmath>
nyistOJ-整數劃分(四)(區間DP)
整數劃分(四) 時間限制:1000 ms | 記憶體限制:65535 KB 難度:3 描述 暑假來了,hrdv 又要留學校在參加ACM集訓了,集訓的生活非常Happy(p
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
NYOJ746 整數劃分(四)(深搜DFS,區間DP)
題目; 整數劃分(四) 時間限制:1000 ms | 記憶體限制:65535 KB 難度:3 描述 暑假來了,hrdv 又要留學校在參加ACM集訓了,集訓的生活非常Happy(ps:你懂得),可是他最近遇到了一個難題,讓他百思不得其解,他非常
南陽理工oj 746 整數劃分(四) 區間dp
區間dp #include <bits/stdc++.h> using namespace std ; typedef long long ll ; char read[40] ; int re[40] ; ll val[40][40] ; ll
寒假作業 (一)配置基於接口劃分VLAN(靜態配置鏈路類型)
接口 基於 watermark 交換 用戶 .com lin 中繼鏈路 ip地址 一、拓撲圖二、組網需求1.如上圖所示,某企業的交換機連接有很多用戶,且相同業務用戶通過不同的設備接入企業網絡。2.為了通信的安全性,同時為了避免廣播風暴,企業希望業務相同用戶之間可以互相訪問,
資料結構-高精度大整數(一)
每當我在C、C++語言中用到大整數的時候,都會羨慕Java的自帶大整數類的屬性。無奈只好自己動手,豐衣足食了。 從網上學習了大整數類的實現方法,覺得寫的挺好的,時間久了不記得從哪位大神的部落格裡學習的了...在這裡記錄一下自己的學習過程吧。 高精度大整數類:本類實現了大數
機器學習實戰決策樹(一)——資訊增益與劃分資料集
from math import log #計算給定的熵 def calcsahnnonent(dataset): numentries = len(dataset) #計算例項的總數 labelcounts ={} #
NYOJ 90 整數劃分(遞推||dp)
整數劃分 時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 描述將正整數n表示成一系列正整數之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1。
測試相關理解(一)等價類劃分法
從測試原理上分為:白盒測試、黑盒測試和灰盒測試。 白盒測試:是通過程式的原始碼進行測試而不使用使用者介面。這種型別的測試需要從程式碼句法發現內部程式碼在演算法,溢位,路徑,條件等等中的缺點或者錯誤,進而加以修正。 黑盒測試:是通過使用整個軟體或某種軟體功能來嚴格地測試, 而
整數劃分(遞迴方法)
最近講到了遞迴,老師佈置了一道經典的整數劃分問題,瀏覽了網上很多程式碼,還是似懂非懂,想找張清晰地展現遞迴過程的圖片也沒有,今天想了想,自己畫了一張才發現,想完整清晰地表現這個過程確實真的很難,情況太多
給出一個不多於5位的正整數,(1) 求出它是幾位數(2) 分別打印出每一位數字(3) 按逆序打印出各位數字,例如原數為321,應輸出123
1、 給出一個不多於5位的正整數,要求: (1) 求出它是幾位數; (2) 分別打印出每一位數字; (3) 按逆序打印出各位數字,例如原數為321,應輸出123. #include <stdio.h> int main()
整數劃分(C語言實現)
指把一個正整數n寫成多個大於等於1且小於等於其本身的整數的和,則其中各加數所構成的集合為n的一個劃分。這是一個典型的遞迴演算法。 所謂整數劃分,是指把一個正整數n寫成為 其中, 為正整數,並且 ; 為n的一個劃分。 如果 中的最大值不超過m,即 ,則
整數劃分(遞迴,附程式執行過程)
問題描述: 任何一個大於1的自然數N,總可以拆分成若干個小於n的自然數之和。 輸入: n 輸出:按字典序輸出具體方案。 我們以 n = 4 為例說明一下執行過程, 下附程式碼 我們以 n = 4 為例說明一下執行過程 閱讀本段 一定要注意各個變數值的變化 cin