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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hdu 2189

發布時間:2024/4/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hdu 2189 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=2189

?

題意不難,就是將一個數拆分成若干個素數的和(數字可以有重復),問能幾種拆分的方法。

第一眼看到一不小心就認為是Dfs,結果自然是超時。

后來仔細想了一下,題目之要求求出有幾種,沒有什么其他要求。而Dfs更適用與要求求出具體哪些素數相加得的題更合適。題目也說了,假設人與人之間是沒區別的,因此我想到了生成函數。使用生成函數,這題看上去就簡單許多了。

?

#include <iostream> #include <cmath> #include <cstring> #include <cstdio>using namespace std; const int MAXN = 150 + 5; int c1[MAXN], c2[MAXN];bool Is_prime( int n ) {int k = sqrt( n );int i;for( i=2;i<=k;i++ ){if( n%i==0 ){return false;}}return true; }int main() {int i,j,k;memset( c1,0,sizeof(c1) );for( i=0;i<MAXN;i+=2 ){c1[i] = 1;}memset( c2, 0, sizeof(c2) );for( i=3;i<MAXN;i++ ){if( Is_prime(i)==false )continue;for( j=0;j<MAXN;j++ ){for( k=0;k+j<MAXN;k+=i ){c2[ k+j ] += c1[ j ];}}for( j=0;j<MAXN;j++ ){c1[j] = c2[j];c2[j] = 0;}}int N;int T;cin >> T;while( T-- ){cin >> N;cout << c1[N] << endl;}return 0; }

?

轉載于:https://www.cnblogs.com/Emerald/p/4108010.html

總結

以上是生活随笔為你收集整理的Hdu 2189的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。