[2018.08.08 T1] 签到题
暂无链接
签到题
【问题描述】
这题很简单!
豆豆在玩一个扑克游戏。游戏规则如下:
一共有 n 张牌,每张牌上有一个花色 c 和一个点数 v,花色不超过 k 种。将这些牌依次放入一列牌的末端。若放入之前这列牌中已有与这张牌花色相同的牌,你可以选择将这张牌和任意一张花色相同的牌之间的所有牌全部取出队列(包括这两张牌本身),并得到与取出的所有牌点数和相同的分数。
现在已知这 n 张牌放入队列的顺序,豆豆想知道他最多能得多少分?
【输入格式】
第一行两个整数 n 和 k,表示牌数和花色数上限。
第二行 n 个整数 c1,c2…cn,ci表示放入的第 i 张牌的花色。
第三行 n 个整数 v1,v2…vn,vi表示放入的第 i 张牌的点数。
【输出格式】
输出一行一个整数,表示最多能得到的分数。
【输入样例】
7 3
1 2 1 2 3 2 3
1 2 1 2 3 2 3
【输出样例】
13
【数据范围】
本题采用捆绑测试,通过一个子任务下所有测试点才能获得该子任务得分。
对于 100%100%100\%的数据:1≤n≤106,1≤ci≤k≤106,1≤vi≤109。1≤n≤106,1≤ci≤k≤106,1≤vi≤109。1 ≤ n ≤ 10^6,1 ≤ ci ≤ k ≤ 10^6,1 ≤ vi ≤ 10^9。
子任务 1:7 分
1≤n,k≤15,ci=vi1≤n,k≤15,ci=vi1 ≤ n,k ≤ 15,c_i=v_i
子任务 2:20 分
1≤n,k≤300,ci=vi1≤n,k≤300,ci=vi1 ≤ n,k ≤ 300,c_i=v_i
子任务 3:17 分
1≤n,k≤30001≤n,k≤30001 ≤ n,k ≤ 3000
子任务 4:23 分
1≤n,k≤2000001≤n,k≤2000001 ≤ n,k ≤ 200000
子任务 5:15 分
1≤n,k≤1000000,ci=vi1≤n,k≤1000000,ci=vi1 ≤ n,k ≤ 1000000,c_i=v_i
子任务 6:18 分
1≤n,k≤10000001≤n,k≤10000001 ≤ n,k ≤ 1000000
题解
为写了个WAWA\mathcal{WA}的正解然后每个SubtaskSubtask\mathcal{Subtask}都错了几个的同学默哀。
dp[i]dp[i]dp[i]表示1∼i1∼i1\sim i的最优解,注意到转移时只可能由同种颜色转移过来,所以我们记录一下每种颜色的最优转移点在哪儿,在转移的时候顺带更新就可以做到O(n)O(n)O(n)。
代码
#include<bits/stdc++.h>
using namespace std;
const int M=1e6+5;
int c[M],v[M],good[M],n,k;
long long dp[M],pre[M],ans;
void in()
{scanf("%d%d",&n,&k);for(int i=1;i<=n;++i)scanf("%d",&c[i]);for(int i=1;i<=n;++i)scanf("%d",&v[i]),pre[i]=pre[i-1]+v[i];
}
void ac()
{memset(good,-1,sizeof(good));for(int i=1;i<=n;++i){dp[i]=dp[i-1];if(good[c[i]]<0){good[c[i]]=i-1;continue;}dp[i]=max(dp[i],dp[good[c[i]]]+pre[i]-pre[good[c[i]]]);if(dp[i-1]>dp[good[c[i]]]+pre[i-1]-pre[good[c[i]]])good[c[i]]=i-1;}for(int i=1;i<=n;++i)ans=max(ans,dp[i]);printf("%lld",ans);
}
int main(){in();ac();}
[2018.08.08 T1] 签到题相关推荐
- 2018年08月19日发烧诸事记
2018年08月19日发烧诸事记 关于发烧给敲响的警钟 八月十六日,中午突然觉的有发烧症状,会宿舍喝了些水便回去了,下午上课时情况愈加严重,浑身发冷,无法正常训练,三点多时便去永康街上的社区医疗服务中 ...
- 2018.12.08【NOIP提高组】模拟B组总结(未完成)
2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...
- 始于2015年11月23日,终于2018年08月08日
留念. 2015年11月23日:在一起 2016年01月17日-21日:北京机场,我们❤ 2016年04月16日:去他所在城市--成都 2016年06月04-06日:第一次小旅游--都江堰.青城山 2 ...
- 南开计算机考研真题,2018年南开大学考研真题硕士研究生入学考试试题
2018年南开大学考研真题硕士研究生入学考试试题 下载地址如下: 注:推荐使用键盘快捷键 "Ctrl"+"F"查找相关考试科目 南开大学刑法学2007年考研真题 ...
- HighNewTech:2019.08.08鲲鹏开发入门暨 2019华为云鲲鹏开发者大赛参赛攻略
High&NewTech:2019.08.08鲲鹏开发入门暨 2019华为云鲲鹏开发者大赛参赛攻略 目录 演讲PPT 1.基础知识 2.赛题解读 3.参赛攻略 4.FAQ 演讲PPT 1.基础 ...
- 2013.08.08——— android 中文简繁体转换
2013.08.08--- android 中文简繁体转换 参考:[url]http://www.pupuliao.info/2012/09/java%E7%9A%84utf-8-%E7%B9%81% ...
- 面试题 08.08. 有重复字符串的排列组合-快速排序+回溯深度优先搜索
面试题 08.08. 有重复字符串的排列组合+快速排序加回溯深度优先搜索 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe" 输 ...
- 第九届蓝桥杯JavaA组(2018年)省赛真题解析
第九届蓝桥杯JavaA组(2018年)省赛真题解析 1.分数 1/1+1/2+1/4+1/8+1/16+- 每项是前一项的一半,如果一共有20项,求这个和是多少 结果用分数表示,类似: 3/2,当然这 ...
- CTF-练习平台-WEB之 签到题
一.签到题 根据提示直接加群在群公告里就能找到~ 转载于:https://www.cnblogs.com/Yuuki-/p/8075945.html
- HighNewTech:2019.08.08华为发布—面向2025十大趋势
High&NewTech:2019.08.08华为发布-面向2025十大趋势 导读 华为今日发布全球产业展望GIV@2025,提出智能世界正在加速而来,触手可及,并预测:到202 ...
最新文章
- 从事软件测试为什么要学自动化?
- python3.6.0怎么安装pip_python3.6环境安装+pip环境配置教程图文详解
- Stanford UFLDL教程 用反向传导思想求导
- linux c 进程策略 优先级,当两个线程拥有相同优先级时,linux c的线程调度策略问题...
- 由浅入深剖析go channel
- linux 命令tar,Linux下tar命令详解
- 【算法竞赛学习】金融风控之贷款违约预测-建模与调参
- Android IPC机制(五)用Socket实现跨进程聊天程序
- 5g时代计算机网络过时,5g云电脑 取代主机(5g时代云电脑会普及吗)
- 洛谷1091 合唱队形
- 【随机数】深入理解random和srandom
- XMindCrack.jar下载
- 旅馆业等领域旅客入住身份核验解决方案
- 个人计算机中的防病毒软件无法,为什么无法在计算机上安装360防病毒软件?
- 鸿蒙曰蜉蝣不知所求,《庄子》释解(五七):浮游不知所求,猖狂不知所往
- Thinksystem本地制作BOMC刷新SR650 升级到指定版本微码
- IIS开启伪静态后html静态页面无法访问的解决方法
- run fsck manually
- Linux网络配置和常用命令
- {电脑救助站}常用知识3
热门文章
- linux重新识别逻辑卷,教你认识LVM逻辑卷
- 简单记录 Part1.3
- shiro(SpringBoot+SpringMVC+Mybatis+Shrio):丰富的登录模块附有GIF动图,博主可免费答疑
- java类加载器用途_对于java类加载器的认识(2)
- VS调试配置外网可访问
- 本地idea运行spark,A master URL must be set in your configuration
- EPPlus.Core 1.5.4 报错 font '?' cannot be found docker core运行时2.1.0 alpine镜像 缺失微软字体...
- 设计模式 单例模式 使用模板及智能指针
- .net读取Lotus Domino文件数据库
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践[转]