icpc:problems:luogup2008
problems | |
---|---|
名称 | 大朋友的数字 |
题目编号 | P2008 |
题目链接 | luogu.com.cn/… |
来源 | Luogu |
算法分类 | 动态规划, 线性动态规划 |
难易程度 | 容易 |
大朋友的数字
想法
由于数字非常小,给每个数字记录,最长不下降子序列的长度tong[]与位置sit[]。对于第i个数,找到比它小的数中最长的,如果有多个长度一样的,取最靠前的。
代码实现
#include<cstdio> #include<cstring> int sum[20], tong[20], sit[20]; int main() { memset(tong, -1, sizeof(tong)); int n, temp; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", &temp); int mlen = 0, msit, target; for (int j = 0; j <= temp; ++j) { if(tong[j] == -1)continue; if(tong[j] + 1 > mlen || (tong[j] + 1 == mlen && msit > sit[j])){ mlen = tong[j] + 1; target = j; msit = sit[j]; } } if(mlen) { tong[temp] = tong[target] + 1; sum[temp] = sum[target] + temp; } else { tong[temp] = 1; sum[temp] = temp; } sit[temp] = i; printf("%d ", sum[temp]); } return 0; }
/app/www/public/data/pages/icpc/problems/luogup2008.txt · 最后更改: 2024/03/18 16:09 由 温婕莺