大意:
给你一个长度为n的数列,求极差小于k的最长的上升数列的长度。
思路:
DP,循环k,每次求一个最长上升子序列。
更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/
#include <stdio.h> #include <string.h> #define LL __int64 int n, m; int a[110]; LL dp[110][110]; void Solve() { while(~scanf("%d%d", &n, &m)) { memset(dp, 0, sizeof(dp)); if(!n && !m) { break; } for(int i = 0; i < n; ++i) { scanf("%d", &a[i]); } for(int i = 0; i < n; ++i) { dp[i][1] = 1; } for(int j = 2; j <= m; ++j) { for(int i = j-1; i < n; ++i) { for(int k = j-2; k < i; ++k) { if(a[i] > a[k]) { dp[i][j] += dp[k][j-1]; } } } } LL sum = 0; for(int i = m-1; i < n; ++i) { sum += dp[i][m]; } printf("%I64d\n", sum); } } int main() { Solve(); return 0; }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索dp
, int
, for
, 长度
, dorado
, 最长
数列
el dorado、el dorado exo、el dorado dubstep、el dorado电影配乐、el dorado mp3 下载,以便于您获取更多的相关知识。
时间: 2024-09-03 11:30:19