• 数据结构 happiness


    问题描述

    这一天是小 V 的生日,他收到了朋友们送给他的礼物。
    现在,小 V n 件礼物,他将这 n 件礼物排成一排,依次编号为 1 n,每件礼物都有
    一个满意值 w[i]
    现在小 V 要从中选取连续编号的礼物(即选取[l, r]内的礼物),使得获得的 happiness
    大。
    [l, r]内的 happiness 定义为:
    [l, r]内所有礼物满意值的最小值) *[l, r]内所有礼物满意值的和)
    V 想知道他能获得的 happiness 最大是多少,你能帮帮他吗?


    数据输入
    第一行为一个正整数 n
    第二行为 n 个整数 w[1], w[2], …, w[n]
    其中:
    对于 50%的数据: 1<=n<=100, 0<=w[i]<=100
    对于 80%的数据: 1<=n<=1,000, 0<=w[i]<=1,000
    对于 100%的数据: 1<=n<=100,000, 0<=w[i]<=10,000


    数据输出
    小 V 能获得的最大 happiness 值。


    样例

    输入

      3

      1 2 3

    输出

      10

    输入

      3

      2 1 3

    输出

      9

    解题思路

      暴力

      以每一个数为起点,向两边扩展,扩展到 比它小的数 或者 数组边界 停止。拓展过程统计sum

      作为起点的数就是这一段数的最小值

      用(sum*作为起点的数)更新最终的答案max_happiness

     code

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 int main()
     5 {
     6     int i,j,k;
     7     int n;
     8     scanf("%d",&n);
     9     int *p = (int *)malloc(sizeof(int)*n);
    10     for(i=0;i<n;i++)
    11         scanf("%d",p+i);
    12     //-------------------------------------
    13     __int64 maxhap=0;
    14     
    15     for(i=0;i<n;i++)
    16     {
    17         __int64 sum=0;
    18         for(j=i-1;j>=0&&p[j]>=p[i];j--)
    19             sum+=p[j];
    20         for(k=i;k<n&&p[k]>=p[i];k++)
    21             sum+=p[k];
    22         maxhap = sum*p[i]>maxhap ? sum*p[i] : maxhap;
    23     }
    24     printf("%I64d",maxhap);
    25     //-------------------------------------
    26     free(p);
    27     return 0;
    28 } 
  • 相关阅读:
    页面中多个小图片元素合成一个大图片之后用CSS调用
    腾讯设计中心博客
    php 配置 curl , gd , openssl , mbstring
    Apache开启Rewrite环境
    防止入侵:My SQL各种攻击方法大全
    Css背景图合并工具功能增强
    php防CC攻击代码
    网站地址栏的图标代码
    PHP漏洞全解(一)PHP网页的安全性问题
    用PHP实现飞信api接口发飞信短信
  • 原文地址:https://www.cnblogs.com/cbattle/p/7622984.html
Copyright © 2020-2023  润新知