題解 UVA11375 遞推

2021-08-24 23:42:12 字數 623 閱讀 3590

題目鏈結

參考了大佬部落格思路摘抄如下

d[i]記錄用i跟火柴可以組成多少種數字,更新式是d[i+c[j]] += d[i], c[j]就是組成數字j要用的火柴數。但是不能以0開頭,最後當火柴數大於等於6的時候就可以在總答案上+1,表示可以構成乙個單獨的0(因為之前沒有0開頭的,所以要+1補回來),最後答案就是f[n] = d[1] + d[2] + d[3] + …. + d[n],資料很大,大數運算。

#include

#include

const

int n=2e3+30;

const

int m=1e3;

const

int c=;

int d[n][m],a[n],f[n][m];

void init()

}memset(f,0,sizeof(f));

f[1][0]=d[1][0];

for(int i=2;i<=n-30;i++)

}for(int i=6;i<=n-30;i++)

}for(int i=2;i<=n-30;i++)

}int main()

return

0;}

UVA11375火柴 遞推 大數

題意 給你n根火柴,問你能組成多少種數字,比如3根可以組成1或者7,組成的數字中不能有前導0,思路 我們開乙個陣列,d i 記錄用i跟火柴可以組成多少種數字,則更新狀態是這樣的 d i c j d i c j 就是組成數字j要用的火柴數,這樣跟新相當於是在模擬寫數字,但是有一點就是不能以0開頭,左後...

uva11375火柴遞推之多狀態轉移遞推

分析 把 已經使用過的火柴數i 看成狀態,可以得到乙個圖。從前往後每新增乙個數字x,就從狀態i轉移到i c x 其中c x 代表數字x需要的火柴數。當i 0的時候不允許 使用數字0 最後當n 6時,給答案單獨加上1,代表整數0 令d i 為從結點0到結點i的路徑條數,則答案f n d 1 d 2 d...

UVa 11375 Matches(遞推 高精度)

思路 1.設d i 是恰好用完i根火柴所獲得的數字種數,設c i 是用i根火柴可以搭出的數字 單個數字0 9 則有c 8 2.我們首先將d i 初始化,讓搭完乙個數字的情況先存在d i 中,目的就是第乙個數字不搭0 則此時d 3.我們已知搭乙個數字至少需要兩根火柴,最多需要7根,我們從i 2開始遍歷...