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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

【递推】P1028 数的计算

發(fā)布時(shí)間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【递推】P1028 数的计算 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:https://www.luogu.com.cn/problem/P1028

考點(diǎn):找規(guī)律,遞推

題意:
給一個(gè)整數(shù)n(n≤1000),在n左邊添加一個(gè)不大于n/2的數(shù)構(gòu)成一個(gè)新數(shù),然后對(duì)添加的數(shù)也做相同處理。統(tǒng)計(jì)所有可能性。
以10舉例,可以有以下14種可能性:

110 210,1210, 310,1310, 410,1410,2410,12410, 510,1510,2510,12510, 10

解法一(遞歸):
理解了題意之后,不難寫出遞歸的解法:

#include <bits/stdc++.h> using namespace std; int n,cnt=1; int A[1005]; void dfs(int x){for(int i=1;i<=x/2;i++){cnt++;dfs(i);} } int main(){cin >> n;dfs(n);cout << cnt; }

輸出:

14

這個(gè)解法可以得出正確答案,但是數(shù)據(jù)大了會(huì)超時(shí)。接下來(lái)主要有兩種做法,一種是用遞歸把1000種答案算出來(lái),把答案寫在代碼里,根據(jù)輸入來(lái)輸出答案,時(shí)間復(fù)雜度是O(1),這樣做的好處是不需要?jiǎng)幽X,實(shí)在找不到規(guī)律就只能用這個(gè)笨辦法了,題目數(shù)據(jù)是1000,所以花個(gè)幾十分鐘還是可以算出來(lái)的;第二種辦法是小范圍的打印出前幾項(xiàng)答案,找規(guī)律,改用遞推公式解。
找規(guī)律的代碼:

#include <bits/stdc++.h> using namespace std; int n,cnt=1; int A[1005]; void dfs(int x){for(int i=1;i<=x/2;i++){cnt++;dfs(i);} } int main(){for (int i = 0; i <= 50; i++) {cnt = 1;dfs(i);printf("%d:%d\n", i, cnt);A[i] = cnt;} }

輸出:

0:1 1:1 2:2 3:2 4:4 5:4 6:6 7:6 8:10 9:10 10:14 11:14 12:20 13:20 14:26 15:26 16:36 17:36 18:46 19:46 20:60 ...

解法二(遞推):
根據(jù)以上結(jié)果,可以找出兩條規(guī)律。
規(guī)律一:當(dāng)n是奇數(shù),A[i] = A[i-1]
規(guī)律二:當(dāng)n是偶數(shù),A[i] = A[i-1] + A[i/2]

因此答案如下:

#include <bits/stdc++.h> using namespace std; int A[1005]; // 記錄答案 /* 根據(jù)題意算出前幾項(xiàng),以便找規(guī)律i 0 1 2 3 4 5 6 7 8 9 ...A[i] 1 1 2 2 4 4 6 6 10 10 ...規(guī)律一:當(dāng)n是奇數(shù),A[i] = A[i-1]規(guī)律二:當(dāng)n是偶數(shù),A[i] = A[i-1] + A[i/2] */ int main() {int n; cin >> n;A[0] = 1; A[1] = 1;for (int i = 2; i < 1000; i++) {if (i % 2 != 0) {A[i] = A[i-1];} else {A[i] = A[i-1] + A[i/2];}}cout << A[n];return 0; }

這個(gè)A[i] = A[i-1] + A[i/2]我實(shí)在是想不出來(lái),不知道大佬們是怎么想到的,orz

總結(jié)

以上是生活随笔為你收集整理的【递推】P1028 数的计算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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