hdu5568 sequence2(dp + 高精度)
2015-11-23 16:52
381 查看
sequence2
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 385 Accepted Submission(s): 151
Problem Description
Given an integer array bi with
a length of n,
please tell me how many exactly different increasing subsequences.
P.S. A subsequence bai(1≤i≤k) is
an increasing subsequence of sequence bi(1≤i≤n) if
and only if 1≤a1<a2<...<ak≤n and ba1<ba2<...<bak.
Two sequences ai and bi is
exactly different if and only if there exist at least one i and ai≠bi.
Input
Several test cases(about 5)
For each cases, first come 2 integers, n,k(1≤n≤100,1≤k≤n)
Then follows n integers ai(0≤ai≤109)
Output
For each cases, please output an integer in a line as the answer.
Sample Input
3 2 1 2 2 3 2 1 2 3
Sample Output
2 3
Source
BestCoder Round #63 (div.2)
题意:给你一个数列,求里面长度为k的上升子序列有多少。
真是sb了,不就是一个高精度吗,自己居然不敢写,实际好水。
思路:dp[i][j]表示以第i个元素结尾的长度为j的上升子序列的长度,dp[i][j] = sum(dp[1~(i-1)][j-1])。
代码写的有点丑。。。
#include<iostream> #include<algorithm> #include<cstdio> #include<queue> #include<map> #include<vector> #include<cstring> using namespace std; int a[110], dp[110][110][42]; int main() { int n, k; while(cin>>n>>k) { for(int i = 1; i<=n; i++) scanf("%d", &a[i]); memset(dp, 0, sizeof(dp)); for(int i = 1; i<=n; i++) dp[i][1][1] = 1; for(int i = 1; i<=n; i++) { for(int j = 2; j<=k; j++) for(int l = 1; l<i; l++) if(a[i]>a[l]) { int t = 0, w = 0; for(int r = 1; r<=40; r++) { w = (dp[i][j][r] + dp[l][j-1][r] + t)/10; dp[i][j][r] = (dp[i][j][r] + dp[l][j-1][r] + t)%10; t = w; } } } int ans[42]; memset(ans, 0, sizeof(ans)); for(int i = 1; i<=n; i++) { int t = 0, w = 0; for(int r = 1; r<=40; r++) { w = (dp[i][k][r] + ans[r] + t)/10; ans[r] = (dp[i][k][r] + ans[r] + t)%10; t = w; } } int ok = 0; for(int i = 40; i>=1; i--) { if(ans[i]||ok) { printf("%d", ans[i]); ok = 1; } } if(!ok) printf("0") printf("\n"); } return 0; }
相关文章推荐
- UI复习
- [Qt]新增UAC功能之requireAdministrator
- iOS 9人机界面指南(一):UI设计基础
- IOS上 关于状态栏的相关设置(UIStatusBar)(转载自shede333博客)
- UITextFieldDelegate和tap事件
- UIToolBar
- iOS学习笔记--03 UITableView相关
- UITextField *textfield常用的取消键盘方法
- dialect does not support sequences
- UITextField
- java+uiautomator 打包运行
- 做一个Active To
- maven web项目build失败
- UIImageView
- iOS-利用UIScrollView实现展示图片的无限滚动及自动滚动 - 郭晓
- UIControl源码分析
- java +UIAutomator 通过中文文本查找控件 报错问题
- UIImageView设置为圆形
- [置顶] MFC使用duilib的几种方式
- 如何使用require.js?