zoukankan      html  css  js  c++  java
  • Wannafly挑战赛21 C 大水题

    题目描述 

    现在给你N个正整数ai,每个数给出一“好数程度” gi(数值相同但位置不同的数之间可能有不同的好数程度)。对于在 i 位置的数,如果有一在j位置的数满足 j < i 且 ai=aj,则你可以将位于[i,j]闭区间内的序列评为“好序列”,然后获得∑gk(j≤k≤i)(此闭区间内“好数程度”之和)分数。
    注意: 在所有情况下,每个数都只能被一个”好序列”包含(只能与其他相应数被评为”好序列”一次);在符合要求的情况下,”好序列”的评定次数不受限制,且通过不同”好序列”获得的分数可以累加。

    输入描述:

    第一行有一个正整数N。
    接下来的一行有N个正整数ai,表示意义如上。
    (保证ai在32位整型范围内)
    接下来的一行有N个正整数gi,表示ai的”好数程度”。
    (保证gi在64位整型范围内)

    输出描述:

    一个整数,你可以获得的最大分数(通过不同”好序列”获得的分数可以累加),保证答案在64位整型范围内。
    示例1

    输入

    复制
    7
    1 2 1 2 3 2 3
    1 4 3 4 3 4 5

    输出

    复制
    23

    备注:

    数据范围 2≤N≤300000




     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <string>
     7 #include <deque>
     8 #include <map>
     9 using namespace std;
    10 #define ll long long 
    11 #define  N 300008
    12 #define  gep(i,a,b)  for(int  i=a;i<=b;i++)
    13 #define  gepp(i,a,b) for(int  i=a;i>=b;i--)
    14 #define  gep1(i,a,b)  for(ll i=a;i<=b;i++)
    15 #define  gepp1(i,a,b) for(ll i=a;i>=b;i--)    
    16 #define  mem(a,b)  memset(a,b,sizeof(a))
    17 ll sum[N],g[N],dp[N];
    18 int a[N],pre[N];
    19 int n;
    20 map<int,int>mp;
    21 int main()
    22 {
    23     scanf("%d",&n);
    24     gep(i,1,n) 
    25     {
    26         scanf("%d",&a[i]);
    27         pre[i]=mp[a[i]];//记录前面a[i]==a[j]的j的位置
    28         mp[a[i]]=i;
    29     }
    30     gep(i,1,n){
    31         scanf("%lld",&g[i]);
    32         sum[i]=sum[i-1]+g[i];//前缀和
    33     }
    34     int j;
    35     gep(i,2,n){
    36         dp[i]=dp[i-1];//初始化为dp[i-1]
    37         j=pre[i];
    38         while(j){
    39             dp[i]=max(dp[i],sum[i]-sum[j-1]+dp[j-1]);//每个数只能用一次
    40             if(dp[i]==sum[i])  break;//一定最大了,不然会超时
    41             j=pre[j];//前面的j都是可能的
    42         }
    43     }
    44     printf("%lld
    ",dp[n]);
    45     return 0;
    46 }
  • 相关阅读:
    jmeter压测学习12-设置持续压测时间(调度器的使用)
    jmeter压测学习11-模拟浏览器访问web页面
    pytest文档73-pytest+yaml实现接口自动化框架之用例参数关联
    selenium+python自动化101-使用execute_script() 方法获取 JavaScript 返回值
    pytest文档72- 使用 template 替换 yaml 文件的变量
    pytest文档71-pytest+yaml实现接口自动化框架
    容器一直处于Create状态
    CAS原理与协议
    Linux route命令详解和使用示例(查看和操作IP路由表)
    Linux reboot全过程
  • 原文地址:https://www.cnblogs.com/tingtin/p/9460827.html
Copyright © 2011-2022 走看看