1. 程式人生 > >藍橋杯 演算法提高 數的劃分----------------------C語言——菜鳥級

藍橋杯 演算法提高 數的劃分----------------------C語言——菜鳥級

/*

問題描述
  一個正整數可以劃分為多個正整數的和,比如n=3時:
  3;1+2;1+1+1;
  共有三種劃分方法。
  給出一個正整數,問有多少種劃分方法。
輸入格式
  一個正整數n
輸出格式
  一個正整數,表示劃分方案數
樣例輸入
3
樣例輸出
3
資料規模和約定
  n<=100

思路: 相當與 有m個球 放如 k 個箱子

*/

#include<stdio.h>
  long long int vis[101][101]={0};//用於 優化 記錄 剪枝 
long long int f(int m,int k)
{   if(vis[m
][k]!=0)return vis[m][k];//當前 要把 m 拆分 k 部分 有多少種情況 if(k==1||k==m)return 1;//當k==1 剩下的就是最後一個數 k==m 此情況 直接全部放 1; if(m<k)return 0; return vis[m][k]=f(m-1,k-1)+f(m-k,k); } int main() { int n,i;long long int sum=0; scanf("%d",&n); for(i=1;i<=n;i++) sum+=f(n,i); //把 m 拆分成 i位; printf
("%lld",sum); return 0; }