日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

整数分区(求将整数拆分成任意个数正整数的方法个数)codewars 爆炸求和

發(fā)布時(shí)間:2023/12/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 整数分区(求将整数拆分成任意个数正整数的方法个数)codewars 爆炸求和 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

依舊是codewars上面的題目,獻(xiàn)上鏈接
codewars 爆炸總和

整數(shù)分區(qū)

整數(shù)n的分區(qū)是正整數(shù)(不一定是不同的)的無序集合,其加起來為n。這種分區(qū)的數(shù)量通常表示為p(n)。函數(shù)p稱為分區(qū)函數(shù),其值列表如下。這從p(0)= 1開始,因?yàn)橹挥幸粋€(gè)正整數(shù)的集合,其總和為零(即空集合)。

n:p(n)0:1 1:1 //12:2 //1+1 23:3 //1+1+1 1+2+1 34:5 //1+1+1+1 1+1+2 3+1 2+2 45:7 //1+1+1+1+1 1+1+1+2 1+1+3 1+2+2 4+1 2+3 56:11 //1+1+1+1+1+1 1+1+1+1+2 1+1+1+3 1+ 1+2+2 1+1+4 1+2+3 1+5 2+2+2 2+4 3+3 6...

數(shù)學(xué)規(guī)律

在寫代碼之前應(yīng)該先搞懂?dāng)?shù)學(xué)分區(qū)的數(shù)學(xué)規(guī)律。

假設(shè)將n進(jìn)行分區(qū),通過規(guī)律我們可以知道n各分區(qū)中包含n-1的分區(qū)加上1,整理之后得出以下規(guī)律:

p(n) = p(n-1)
+p(n-2) - p(n-2)中有“+1”的分區(qū)方法
+p(n-3) - p(n-3)中有“+1”的分區(qū)方法 - p(n-3)中有“+2”的分區(qū)方法

直到 n-i < i

p(n)12345678910
123571115223042
w[i][n]12345678910規(guī)律
+011111111111
+101235711152230p(n-1)
+20001122447w[i-1][n-1]-w[i-1][n-2]
+30000011122w[i-1][n-1]-w[i-1][n-3]
+40000000011w[i-1][n-1]-w[i-1][n-4]
+50000000001w[i-1][n-1]-w[i-1][n-5]
+iw[i-1][n-1]-w[i-1][n-i]


p(n)=∑w[i][n](0≤i≤(n+1)/2)p(n)=\sum w[i][n](0≤i≤(n+1)/2) p(n)=w[i][n](0i(n+1)/2)
找出規(guī)律之后我們就可以寫代碼了

代碼架構(gòu)

可以看出解決整數(shù)分區(qū)最重要的兩個(gè)函數(shù)一個(gè)是計(jì)算p(n)的求和公式,一個(gè)是計(jì)算w[n][i]的函數(shù)。

//p(n)加和函數(shù) using ull = unsigned long long; ull exp_sum(ull n) {ull num = 0;for (ull i = 0; i <= n/ 2; i++)//當(dāng)i>n/2,w[n][i]=0{num += cal_w(n, i);}sum_vec.push_back(num); return num; }//w[n][i]的計(jì)算函數(shù) ull cal_w(ull n, ull i) {if (n==0||i==0){return 1;}if (i==1){return sum_vec[n - 1];}if (i>n/2){return 0;}return add(n - 1, i - 1) - add(n - i, i - 1); };

在頁面上提交的時(shí)候發(fā)現(xiàn)有超時(shí),那么說明要改數(shù)據(jù)結(jié)構(gòu)了。
解決函數(shù)運(yùn)行性能,常常用內(nèi)存換運(yùn)行時(shí)間,也就是將以前計(jì)算過得數(shù)據(jù)存儲(chǔ)出來,方便使用。
加入兩個(gè)容器:

vector<ull>p{1,1,2}; vector<vector<ull>>w{ {0},{1},{1,1} };

代碼更改如下:

//前向聲明ull exp_sum(ull n); ull cal_w(ull n, ull i);//w[n][i]的計(jì)算函數(shù) ull cal_w(ull n, ull i) {if (n>=w.size())//如果w中沒有n的相關(guān)加和數(shù)據(jù),先進(jìn)行w[n]的計(jì)算{w.push_back(vector<ull>(n, 0));w.back()[0] = 1;w.back()[1] = p[n - 1];for (ull i = 2; i <= n / 2; i++){w.back()[i]= cal_w(n - 1, i - 1) - cal_w(n - i, i - 1);}}if (i>=w[n].size()&&i>n/2){return 0;}return w[n][i];//返回w[n][i] };//p(n)加和函數(shù) ull exp_sum(ull n) {while (n>=p.size()){ull num = 0;for (ull i = 0; i <= p.size()/ 2; i++)//p[n]不存在時(shí),先將n以及n以前的所有數(shù)據(jù)補(bǔ)齊{num += cal_w(p.size(), i);}p.push_back(num);}return p[n]; }

然后問題就完美解決了

貼上整數(shù)分區(qū)的值列表,可以用來調(diào)試

整數(shù)分區(qū)

總結(jié)

以上是生活随笔為你收集整理的整数分区(求将整数拆分成任意个数正整数的方法个数)codewars 爆炸求和的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩欧av | 亚洲视频一区在线 | 中文字幕在线视频免费播放 | 红桃视频一区 | 山村大伦淫第1部分阅读小说 | 色综合五月天 | 欧美精品入口蜜桃 | 白丝美女被草 | 美女张开腿让人桶 | 蜜色视频 | 激情久久中文字幕 | 羞羞的视频网站 | 欧美美女色图 | 99精品视频免费在线观看 | www国产精品视频 | 国产高清毛片 | 一级大黄毛片 | 奇米影音 | 奇米精品一区二区三区四区 | 奇米中文字幕 | 奇米色综合 | 豆花免费跳转入口官网 | 台湾swag在线播放 | 久久国 | av有码在线 | 桃谷绘里香在线播放 | 青青草激情视频 | 91插插影库 | 日韩一级片免费 | 久久久91视频 | 日本少妇网站 | 日本成人一区二区 | 亚洲成av人片一区二区 | 一级伦理片 | 18一20岁毛毛片 | 999精品一区 | 无码国产69精品久久久久同性 | 国产伦一区二区 | 欧美三级在线播放 | 噜噜在线视频 | 日韩一区二区三免费高清在线观看 | 久久在线一区二区 | 韩国三级中文字幕 | 日本高清视频一区二区 | 岛国福利视频 | 色吊妞| 欧洲视频一区二区 | 91丝袜| 中文字幕人妻一区二区三区 | 黄色在线播放视频 | 夜夜嗨av一区二区三区免费区 | 日日噜噜夜夜狠狠久久丁香五月 | 日韩在线观看一区 | 肉丝袜脚交视频一区二区 | 性开放耄耋老妇hd | 懂色av一区二区三区免费 | 婷婷色av | 乌克兰黄色片 | 九九热免费 | 一级片在线 | 丁香一区二区三区 | 在线色网址| 精品乱子伦| a天堂在线 | 波多野结衣亚洲一区二区 | 91国产丝袜播放在线 | 欧美肥老妇视频九色 | 国产亚洲精久久久久久无码苍井空 | 国产吃瓜黑料一区二区 | 青青草老司机 | 九九三级 | 国产精品成人在线 | 69av在线| 日韩大尺度视频 | 99色亚洲 | 一区二区三区国产在线观看 | 欧美精品二区三区 | 欧美日韩人妻精品一区二区三区 | 91久久网 | 贵族女沦为官妓h呻吟 | 亚洲四区| 亚洲a在线播放 | 91精品人妻一区二区 | av在线资源站 | 国产成人久久精品流白浆 | 女婴高潮h啪啪 | 日本三级少妇 | 日韩精品一区二区不卡 | 男生女生插插插 | 午夜三级福利 | 嫩草一二三 | 日本一区二区视频在线观看 | 亚洲熟妇无码另类久久久 | 综合久久99 | 久久91视频 | 禁网站在线观看免费视频 | 三级av网| 97久草| 天天精品 |