ural 1009. K-based Numbers(dp)
2014-10-09 10:51
363 查看
1a
题意:
给你一个n和k,k代表进制,n是n位数,求出符合要求的n位数有多少个,
要求:数中不能有连续的2个0,前导不能是0
dp[i][0]表示第i位上的数字为非0时的种类数目,dp[i][1]表示第i位上的数字为0时的种类数。
易知dp[i][0]=dp[i-1][1],dp[i][1]=(dp[i-1][0]+dp[i-1][1])*(k-1);
dp水题
第二种方法
dp[i]表示符合条件的n位数的种类数,那么:
dp[1]=k-1;由于第一位不能是0;
dp[2]=k*(k-1);
dp[i]=(dp[i-1]+dp[i-2])*(k-1);转移到dp[i]的时候,不需要考虑第i位上填什么,专注于考虑是从什么状态转移而来的,
如果第i位上填0,那么i-1就不能是0,此时dp[i]=dp[i-2]*(k-1),表示第i-1位上非0的情况,
如果第i位上不填0,那么第i-1位上的数可以任意填,即为dp[i]=dp[i-1]*(k-1),表示第i位上可以填k-1种数
合起来就是dp[i]=(dp[i-1]+dp[i-2])*(k-1);
题意:
给你一个n和k,k代表进制,n是n位数,求出符合要求的n位数有多少个,
要求:数中不能有连续的2个0,前导不能是0
dp[i][0]表示第i位上的数字为非0时的种类数目,dp[i][1]表示第i位上的数字为0时的种类数。
易知dp[i][0]=dp[i-1][1],dp[i][1]=(dp[i-1][0]+dp[i-1][1])*(k-1);
dp水题
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <vector> #include <queue> #include <map> #include <limits.h> using namespace std; typedef long long ll; ll dp[20][5]; int main() { int n,k; while(~scanf("%d",&n)) { scanf("%d",&k); dp[1][0]=1; dp[1][1]=k-1; for(int i=2;i<=n;i++) { dp[i][0]=dp[i-1][1]; dp[i][1]=(dp[i-1][1]+dp[i-1][0])*(k-1); } ll ans=dp [1]; printf("%I64d\n",ans); } return 0; }
第二种方法
dp[i]表示符合条件的n位数的种类数,那么:
dp[1]=k-1;由于第一位不能是0;
dp[2]=k*(k-1);
dp[i]=(dp[i-1]+dp[i-2])*(k-1);转移到dp[i]的时候,不需要考虑第i位上填什么,专注于考虑是从什么状态转移而来的,
如果第i位上填0,那么i-1就不能是0,此时dp[i]=dp[i-2]*(k-1),表示第i-1位上非0的情况,
如果第i位上不填0,那么第i-1位上的数可以任意填,即为dp[i]=dp[i-1]*(k-1),表示第i位上可以填k-1种数
合起来就是dp[i]=(dp[i-1]+dp[i-2])*(k-1);
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <vector> #include <queue> #include <map> #include <limits.h> using namespace std; typedef long long ll; ll dp[20]; int main() { int n,k; while(~scanf("%d%d",&n,&k)) { dp[1]=k-1; dp[2]=k*(k-1); for(int i=3;i<=n;i++) dp[i]=(k-1)*(dp[i-1]+dp[i-2]); ll ans; ans=dp ; printf("%I64d\n",ans); } return 0; }
相关文章推荐
- ural 1009. K-based Numbers - dp
- ural 1009. K-based Numbers(简单dp)
- URAL - 1009 - K-based Numbers (简单DP)
- URAL 1009. K-based Numbers
- URAL 1009 K-based numbers(DP递推)
- URAL 1009. K-based Numbers
- ural 1009. K-based Numbers
- Ural 1009. K-based Numbers DP
- URAL1009——DP——K-based Numbers
- Lightoj 1009. K-based Numbers(DP)
- Ural-1009. K-based Numbers(简单组合数)
- URAL 1009. K-based Numbers(简单递推)
- Ural 1009 K-based Numbers(DP)
- URAL1009 - K-based Numbers - 数位dp
- 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动态规划)
- 递推DP URAL 1009 K-based Numbers
- ural 1119【dp+精度】