ural1009(动态规划)

来源:互联网 发布:android源码语法 编辑:程序博客网 时间:2024/06/03 20:15

A - K-based NumbersURAL - 1009


 Let’s consider K-based numbers, containing exactly N digits. We define a number to be valid if its K-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 N digits.
You may assume that 2 ≤ K ≤ 10; N ≥ 2; N + K ≤ 18. 
The numbers N and K in decimal notation separated by the line break.
210
90
思路:一位时有k-1种,两位时有k*(k-1)种,从第三位开始每一位都是(k-1)种乘上(dp[i-1]+dp[i-2])故递推式很容易就推出来了。
#include<iostream>#include<string.h>#include<algorithm>#include<stdio.h>  using namespace std;long long dp[21];  int n,k,i;  int main()  {      while(~scanf("%d%d",&n,&k))      {                dp[1]=k-1; dp[2]=(k-1)*k;           for (i=3;i<=n;i++)              dp[i]=(k-1)*(dp[i-1]+dp[i-2]);           printf("%lld\n",dp[n]);                               }      return 0;     }  


原创粉丝点击