欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

hdu 5062(dp)

发布时间:2025/3/16 编程问答 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 hdu 5062(dp) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题意:求1到10的n次方的范围内,满足:

1、是回文数;

2、回文的前半部分满足升序;


解题思路:dp[i][j]第i个数是j的递增序列的个数。假设求k位数满足条件的序列个数,只需要求出dp[k/2][1.....9]的总和即可。

#include<iostream> #include<cstdio> #include<cstring> using namespace std;int dp[10][10]; void init() {dp[0][1] = 1;for(int i = 1; i <= 9; i++) dp[1][i] = 1;for(int i = 2; i <= 6; i++)for(int j = 1; j <= 9; j++)for(int k = 1; k < j; k++)dp[i][j] += dp[i-1][k]; }int main() {int t,n;init();scanf("%d",&t);while(t--) {scanf("%d",&n);if(n == 0) {printf("1\n");continue;}int ans = 0;for(int i = 1; i <= n; i++)for(int j = 1; j <= 9; j++) {if(i % 2 == 0)ans += dp[i / 2][j];else ans += dp[i / 2 + 1][j];}printf("%d\n",ans);}return 0; }

总结

以上是生活随笔为你收集整理的hdu 5062(dp)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。