• 洛谷 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]<<" ";
    }
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    学习方法
    Python——语言基础
    JSP——JavaServer Page中的隐式对象(implicit object)、指令(directive)、脚本元素(scripting element)、动作(action)、EL表达式
    Socket——实现一个简单的静态网页服务器
    CSS效果——绝对居中
    Java——重写hashCode()和euqals()方法
    Java操作符——i++ 和 ++i的区别
    JDBC——数据库连接池以及JDBC代码模版模版
    JDBC——DBHelper代码模版
    JDBC——JDBC基础
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7995128.html
Copyright © 2020-2023  润新知