题目背景
在 NOIP2013 的赛场上,常神牛华丽丽的手残了,小朋友的数字一题只得了 1010 分。于是,他要恶搞一下这道题。
题目描述
有一批大朋友(年龄 1515 岁以上),他们每人手上拿着一个数字,当然这个数字只有 11 位,也就是 00 到 99 之间。每个大朋友的分数为在他之前的最长不下降子序列中所有数之和。(这个序列必须以它作为结尾!)如有多个最长不下降子序列,那么取编号字典序最小的。现在告诉你有 n 个大朋友,以及他们各自的数字,请你求出他们每个人的分数。
输入格式
第一行,11 个数 n。
第二行,n 个数,分别表示每个人的数字。
输出格式
一行,n 个数,分别表示每个人的分数。

说明/提示
【样例解释 11】
五个人分数分别为 (1),(1+2),(1+2+5),(1+2+3),(1+2+3+4)(1),(1+2),(1+2+5),(1+2+3),(1+2+3+4)。
【样例解释 22】
五个人分数分别为 (1),(1+7),(1+5),(1+7+9)(1),(1+7),(1+5),(1+7+9) (还有一个 (1,5,9)(1,5,9)),(1+5+6)(1+5+6)。
【数据规模】

#include <bits/stdc++.h>
using namespace std;
long long n;
long long arr[10010],f[10010],sum[10010];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(long long i=0;i<n;i++){
cin>>arr[i];
}
for(long long i=0;i<n;i++){
sum[i]=arr[i];
for(long long j=0;j<i;j++){
if(arr[j]<=arr[i]&&f[i]<f[j]+1){
f[i]=f[j]+1;
sum[i]=sum[j]+arr[i];
}
}
cout<<sum[i]<<' ';
}
return 0;
}
这篇文章讲述了如何根据NOIP2013比赛中的题目,计算每个大朋友(15岁以上)的分数,该分数基于他们手中数字构成的最长不下降子序列。C++代码给出了问题的解决方案。
1239

被折叠的 条评论
为什么被折叠?



