Ural-1009. K-based Numbers(简单组合数)
2013-06-30 19:57
459 查看
1009. K-based Numbers
Time limit: 1.0 second Memory limit: 64 MB Let’s consider K-based numbers, containing exactly N digits. We define a number to be valid if itsK-based notation doesn’t contain two successive zeros. For example:1010230 is a valid 7-digit number; 1000198 is not a valid number; 0001235 is not a 7-digit number, it is a 4-digit number. Given two numbers N and K, you are to calculate an amount of valid K based numbers, containing Ndigits.You may assume that 2 ≤ K ≤ 10; N ≥ 2; N + K ≤ 18.Input
The numbers N and K in decimal notation separated by the line break.Output
The result in decimal notation.Sample
input | output |
---|---|
[code]2 10 | 90 [/code] |
题意:n位k进制的数且不能有两个以上连续的0
思路:符合要求的数之中最多含有 n/2(整除)个0。当有i个0时,非零数有(k-1)^(n-i)种情况,除了首位不能是0外,其他位都有可能为0,共有Cn(n-i,i)种情况, 其中Cn()为组合数。根据乘法原则,当有i个0时,共有(k-1)^(n-i)*Cn(n-i,i)种情况。
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <map> #include <set> #include <algorithm> using namespace std; int n,k; int power(int x,int y) { int res = 1; for(int i=1;i<=y;i++) { res *= x; } return res; } int Cn(int x,int y) { int res=1; for(int i=x;i>x-y;i--) { res *= i; } for(int i=y;i>0;i--) { res /= i; } return res; } void solve() { int ans=0,tmp1; for(int i=0;i<=n/2;i++) { tmp1 = Cn(n-i,i); ans +=(power(k-1,n-i)*tmp1); } printf("%d\n",ans); } int main() { // freopen("in.txt","r",stdin); while(scanf("%d%d",&n,&k)!=EOF) { solve(); } return 0; }
相关文章推荐
- ural 1009. K-based Numbers(简单dp)
- URAL 1009. K-based Numbers(简单递推)
- ural 1009. K-based Numbers - dp
- URAL - 1009 - K-based Numbers (简单DP)
- ural 1009. K-based Numbers
- ural 1009. K-based Numbers 1012. K-based Numbers. Version 2 1012. K-based Numbers. Version 3
- URAL 1009. K-based Numbers
- URAL1009 K-based Numbers,简单DP
- ural 1009. K-based Numbers(dp)
- URAL 1009. K-based Numbers
- URAL 1009. K-based Numbers
- Ural-1044. Lucky Tickets. Easy!(简单题)
- URAL 1934 Black Spot --- 简单最短路变形
- pat 1056. 组合数的和(15)及其简单的扩展
- URAL 1109 简单二分图匹配
- Ural(Timus) 1009 K-based Numbers
- ural 1225.Flags(简单dp)
- URAL 1158 AC自动机上的简单DP+大数
- 1009. K-based Numbers
- Ural 1114. Boxes 解题报告(组合数计算)