zoukankan      html  css  js  c++  java
  • 洛谷 P2008 大朋友的数字

    题目背景

    在NOIP2013的赛场上,常神牛华丽丽的手残了,小朋友的数字一题只得了10分。于是,他要恶搞一下这道题。

    题目描述

    有一批大朋友(年龄15岁以上),他们每人手上拿着一个数字,当然这个数字只有1位,也就是0到9之间。每个大朋友的分数为在他之前的最长不下降子序列中所有数之和。(这个序列必须以它作为结尾!)如有多个最长不下降子序列,那么取编号字典序最小的。现在告诉你有n个大朋友,以及他们各自的数字,请你求出他们每个人的分数。

    输入输出格式

    输入格式:

     

    输入文件为bignum.in。

    第一行,1个数n。

    第二行,n个数,分别表示每个人的数字。

     

    输出格式:

     

    输出文件为bignum.out。

    一行,n个数,分别表示每个人的分数。

     

    输入输出样例

    输入样例#1: 复制
    【输入输出样例1】
    5
    1 2 5 3 4
    【输入输出样例2】
    5
    1 7 5 9 6
    输出样例#1: 复制
    【输入输出样例1】
    1 3 8 6 10
    【输入输出样例2】
    1 8 6 17 12

    说明

    【样例解释1】

    五个人分数分别为(1),(1+2),(1+2+5),(1+2+3),(1+2+3+4).

    【样例解释2】

    五个人分数分别为(1),(1+7),(1+5),(1+7+9){还有一个(1,5,9)},(1+5+6)。

    【数据规模】

    对于50%的数据,1≤n≤500;

    对于80%的数据,1≤n≤1000;

    对于100%的数据,1≤n≤10,000。

    思路:动规

    最长单增子序列的板子。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n;
    int num[10010],tmp[10010],ans[10010];
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)    scanf("%d",&num[i]);
        for(int i=1;i<=n;i++){
            tmp[i]=1;
            for(int j=1;j<i;j++)
                if(num[i]>=num[j])
                    if(tmp[i]<tmp[j]+1){
                        tmp[i]=tmp[j]+1;
                        ans[i]=ans[j];
                    }
            ans[i]+=num[i];
        }
        for(int i=1;i<=n;i++)
            cout<<ans[i]<<" ";
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    c# 在WebBrowser中用SendMessage模拟鼠标点击
    R 脚本读取汇总 Excel 表格数据
    lsyncd —— 多机器实时同步文件神器
    gops —— Go 程序诊断分析工具
    【读书】《跟任何人都聊得来》
    Monkeyrunner自动化测试由浅入深(第一节)
    【读书】《优秀到不能被忽视》
    【管理提升】360管理沟通的学习收获总结
    【读书】《不懂说话你怎么带团队》
    软件测试行业现状 2018年度报告
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7995128.html
Copyright © 2011-2022 走看看