递推DP URAL 1009 K-based Numbers
2015-05-06 17:38
375 查看
题目传送门
题意:n位数,k进制,求个数
分析:dp[i][j] 表示i位数,当前数字为j的个数;若j==0,不加dp[i-1][0];
代码1:
代码2(空间优化):
题意:n位数,k进制,求个数
分析:dp[i][j] 表示i位数,当前数字为j的个数;若j==0,不加dp[i-1][0];
代码1:
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int MAXN = 22; const int INF = 0x3f3f3f3f; long long dp[MAXN][MAXN]; int main(void) //URAL 1009 K-based Numbers { //freopen ("B.in", "r", stdin); int n, k; while (scanf ("%d%d", &n, &k) == 2) { memset (dp, 0, sizeof (dp)); for (int i=1; i<k; ++i) dp[1][i] = 1; for (int i=2; i<=n; ++i) { for (int j=0; j<k; ++j) { if (!j) for (int l=1; l<k; ++l) dp[i][j] += dp[i-1][l]; else for (int l=0; l<k; ++l) dp[i][j] += dp[i-1][l]; } } long long ans = 0; for (int i=0; i<k; ++i) ans += dp [i]; printf ("%I64d\n", ans); } return 0; }
代码2(空间优化):
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int MAXN = 22; const int INF = 0x3f3f3f3f; long long dp[MAXN]; int main(void) //URAL 1009 K-based Numbers { //freopen ("B.in", "r", stdin); int n, k; while (scanf ("%d%d", &n, &k) == 2) { memset (dp, 0, sizeof (dp)); dp[0] = 1; dp[1] = k - 1; for (int i=2; i<=n; ++i) { dp[i] = (dp[i-1] + dp[i-2]) * (k-1); } printf ("%I64d\n", dp ); } return 0; }
相关文章推荐
- URAL 1009 K-based numbers(DP递推)
- URAL 1009 K-based Numbers (DP动态规划)
- URAL1009 K-based Numbers,简单DP
- URAL1009 - K-based Numbers - 数位dp
- URAL1009——DP——K-based Numbers
- Ural 1009 K-based Numbers(DP)
- URAL - 1009 - K-based Numbers (简单DP)
- K-based Numbers (URAL 1009)
- URAL1009 K-based Numbers
- Ural 1009 K-based Numbers
- ural 1009. K-based Numbers(简单dp)
- URAL 1009 K-based Numbers (DFS)
- K-based Numbers(Ural_1009)
- 递推DP URAL 1225 Flags
- 递推DP URAL 1081 Binary Lexicographic Sequence
- Ural 1009 K-based Numbers
- ural1009 数位dp
- Ural(Timus) 1009 K-based Numbers
- URAL - 1009 简单DP..新的开始...
- [BZOJ 1009][HNOI2008]GT考试(KMP+线性齐次递推的矩阵加速?+DP)