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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu 4602 Partition

發布時間:2025/3/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 4602 Partition 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:將一個整數 n 進行無序拆分,一共有2^(n-1)種;輸入一個整數 k ,問 k 在所有拆分中出現的次數。

分析:a[n][k]=a[i][k]+2^(n-k-1);(k<=i<n)

通過歸納法得到 a[n][k]=2*a[n-1][k]+2^(n-3);(n>=3),而對所有的 k 都有a[k][k]=1,a[k+1][k]=2,........

所以數組a的值與第二維k無關。那么 a[k]=1,a[k+1]=2,...;令n=n-k+1;即可以表示為 a[1]=1,a[2]=2,...a[n]=2*a[n-1]+2^(n-3)。

最終得到 a[n]=2^(n-1)+(n-2)*2^(n-3);將n=n-k+1代入得:a[n-k+1]=2^(n-k)+(n-k-1)*2^(n-k-2)

// Time 78ms; Memory 332K #include<iostream> #include<cstdio> using namespace std; const int inf=1000000000+7; long long pow(int n) {long long q=1,p=2;while(n){if(n%2) q=(q*p)%inf;n/=2;p=(p*p)%inf;}return q; } int main() {int t,n,k;long long sum;scanf("%d",&t);while(t--){scanf("%d%d",&n,&k);if(n<k) sum=0;else if(n-k+1==1) sum=1;else if(n-k+1==2) sum=2;else sum=(pow(n-k)+((n-k-1)*pow(n-k-2))%inf)%inf;cout<<sum<<endl;}return 0; }

?

?

?

轉載于:https://www.cnblogs.com/jiangu66/p/3221533.html

總結

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

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