递推DP URAL 1017 Staircases
2015-05-09 15:32
399 查看
题目传送门
/* 题意:给n块砖头,问能组成多少个楼梯,楼梯至少两层,且每层至少一块砖头,层与层之间数目不能相等! 递推DP:dp[i][j] 表示总共i块砖头,最后一列的砖头数是j块的方案数 状态转移方程:dp[i][j] += dp[i-j][k] 表示最后一列是j,那么上一个状态是少了最后一列 总共i-j块砖头,倒数第二列是k块砖头。k<j, j<=i 最后累加dp [i], i<n因为最少要两层 dp[0][0] = 1; 还有更简单的做法,没看懂:http://m.blog.csdn.net/blog/jyysc2010/9917439 */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <string> using namespace std; const int MAXN = 5e2 + 10; const int INF = 0x3f3f3f3f; long long dp[MAXN][MAXN]; long long ans; int main(void) //URAL 1017 Staircases { //freopen ("J.in", "r", stdin); int n; while (scanf ("%d", &n) == 1) { memset (dp, 0, sizeof (dp)); dp[0][0] = 1; for (int i=1; i<=n; ++i) { for (int j=0; j<=i; ++j) { for (int k=0; k<j; ++k) { dp[i][j] += dp[i-j][k]; } } } ans = 0; for (int i=0; i<n; ++i) ans += dp [i]; printf ("%I64d\n", ans); } return 0; }
相关文章推荐
- URAL 1017. Staircases(递推)
- ural 1017. Staircases(dp)
- ural 1017. Staircases(dp数的划分)
- Ural 1017 Staircases(DP)
- Ural_1017. Staircases(DP)
- ural 1017. Staircases(dp)
- 递推DP URAL 1353 Milliard Vasya's Function
- 递推DP URAL 1260 Nudnik Photographer
- URAL 1017|Staircases|动态规划
- 递推DP URAL 1031 Railway Tickets
- ural 1017 Staircases
- 递推DP URAL 1167 Bicolored Horses
- 递推DP URAL 1244 Gentlemen
- ural 1017. Staircases
- 递推DP URAL 1586 Threeprime Numbers
- URAL1017——DP——Staircases
- URAL 1017 Staircases
- 递推DP URAL 1225 Flags
- URAL 1017 Staircases
- ural 1017. Staircases DP