HDU 4602 - Partition
原題見:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106940#problem/A
?
題目要求:按題意找出對應(yīng)數(shù)字出現(xiàn)的次數(shù)。
? 4=1+1+1+1
??4=1+1+2
??4=1+2+1
??4=2+1+1
??4=1+3
??4=2+2
??4=3+1
??4=4?????????????? 例如此例:1出現(xiàn)的次數(shù)為12。
?
?
代碼如下:
1 #include <stdio.h> 2 3 typedef long long ll; 4 ll mod=1e9+7; 5 //#include <stdlib.h> 6 ll qpow(ll n,ll m) 7 { 8 ll ans = 1; 9 while(m>0) 10 { 11 if(m&1) ans = ans * n % mod; 12 n = n * n % mod; 13 m = m >> 1; 14 } 15 return ans; 16 } 17 /*ll fun(ll n,ll k) 18 { 19 if(n==k) return 1; 20 else if(n==k+1) return 2; 21 else if(n-2 == k) return 5; 22 //else if(n-3 == k)return 12; 23 else return 2*fun(n-1,k)+qpow(2,n-3); 24 }*/ 25 int main() 26 { 27 int t; 28 ll ans,n,k; 29 scanf("%d",&t); 30 while(t--) 31 { 32 scanf("%lld%lld",&n,&k); 33 if(k>n) { 34 printf("0\n"); 35 continue; 36 } 37 else 38 { 39 //printf("%lld\n",fun(n,k)); 40 ans=2*qpow(2,n-k-1)%mod+(n-k-1)*qpow(2,n-k-2)%mod; 41 printf("%lld\n",ans%mod); 42 } 43 } 44 45 46 return 0; 47 }找規(guī)律即可,例如將5的實例也寫出后數(shù)數(shù)=,=會發(fā)現(xiàn)
n=%d 1???? 2??? 3? ? 4??? 5
k=1??? 1???? 2??? 5?? 12? 28
k=2??? 0???? 1??? 2??? 5?? 12
k=3??? 0???? 0??? 1??? 2??? 5
k=4??? 0???? 0??? 0??? 1??? 2
k=5??? 0???? 0??? 0??? 0??? 1
?
找到規(guī)律吧少年~~~~f(n)=2*f(n-1)+pow(2,n-3)或者ans=2*pow(2,n-k-1)%mod+(n-k-1)*pow(2,n-k-2)%mod
也就是說注釋的部分也是對的,那為什么會變成注釋呢?? =。=因為遞歸層數(shù)太多,導(dǎo)致本寶的程序MLT……!!空間超限。。。生平第一次啊。。。。然后就淪為注釋。。。
嗯,就這樣吧!
轉(zhuǎn)載于:https://www.cnblogs.com/ivangin/p/5201655.html
總結(jié)
以上是生活随笔為你收集整理的HDU 4602 - Partition的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: INT(M)表示什么意思?
- 下一篇: Verilog中wire与reg类型的区