链接:http://codeforces.com/contest/1380/problem/D

题目大意:

n个士兵站成一排,每个有一个能力值a[i](两两不同)。

现在有两种操作

1. 花费x的代价,击败连续的k个士兵。

2. 花费y的代价,选择两个相邻的,大的击败小的。

问留下所给的另外一个序列b的士兵,最小代价。

题目思路:

明显是根据b序列把各个a序列区间按照分开,然后把这些段儿删掉即可,如果思考dp的话,明显这是个和区间有关系,但是不太好转移。

先考虑-1的情况吧,第一种就是b和a序列中的各个元素的先后顺序不能发生变化。

第二种就是,当这一段长度不足k,而且段中的最大值,比这一段两边的还要大的时候,发现这个最大的怎么都删不掉。

这时思路就出来了,只要按照够不够k个,最大元素和两边元素的大小关系就可以判断了。

1。 当这一段不足k,且最大元素比两边的还要大,这个最大元素删不掉,输出-1.

2.    当这一段不足k,最大元素比两边某个小,那么可以选择一个一个删。

3.     当这一段大于k个,那么无论如何都可以删掉这一段,因为可以内部删,在判断k*y 和 x的关系,决定使用哪种删法贪心,前         提是要先把%k的余数那一部分处理掉,再解决这个剩下的k的倍数。

代码中再a,b序列的首位添加了-1便于操作,双指针的方法,idx1,idx2是指在a上滑动,定位待删除区间。idx3是在b上滑动,表示现在要在a中定位的两个值。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll MAXN = 2e5+5;
ll b[MAXN],a[MAXN];
int main()
{ll n,m;ll x,k,y;cin>>n>>m;cin>>x>>k>>y;a[0] = b[0] = -1;for(ll i=1;i<=n;i++){cin>>a[i];}for(ll i=1;i<=m;i++){cin>>b[i];}a[++n] = -1;b[++m] = -1;ll idx1 = 0;ll idx2 = 0;ll idx3 = 0;ll ans = 0;bool f = 1;while(idx3<m){while(idx1<=n){if(a[idx1]!=b[idx3]){idx1++;}else{break;}}if(idx1>n){f=0;break;}idx3++;while(idx2<=n){if(a[idx2]!=b[idx3]){idx2++;}else{break;}}// cout<<idx1<<" * "<<idx2<<" * "<<idx3<<endl;if(idx2>n){f = 0;break;}ll num = idx2-idx1-1;ll Max = 0;for(ll i=idx1+1;i<=idx2-1;i++){Max = max(Max,a[i]);}// cout<<Max<<" ** "<<endl;if(num<k){if(Max<a[idx1] || Max<a[idx2]){ans += num*y;// cout<<num*y<<" ****1 "<<endl;}else{f=0;break;}}else{ll md = num%k;ll cnt = num/k;num -= md;ans += md*y;//  cout<<md*y<<" ***+ "<<endl;if(y*k<x){if(Max<a[idx1] || Max<a[idx2]){ans += y*num;}else{ans += x;ans += (num-k)*y;}// cout<<num*y<<" ****2 "<<endl;}else{ans += cnt*x;//     cout<<cnt*x<<" ****3 "<<endl;}}//cout<<endl;}if(!f){cout<<-1<<endl;}else {cout<<ans<<endl;}
}

Codeforces D. Berserk And Fireball(贪心)相关推荐

  1. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...

  2. Codeforces 671E Organizing a Race (贪心、线段树)

    题目链接 https://codeforces.com/contest/671/problem/E 题解 完全不会做--基本是抄lk的代码 ruogu的题解: https://www.luogu.co ...

  3. CodeForces - 1529E Trees of Tranquillity(贪心+线段树)

    题目链接:https://vjudge.net/problem/CodeForces-1529E 题目大意:给出两棵根节点为 111 的树,分别称为 AAA 树和 BBB 树,现在通过两棵树可以构造出 ...

  4. [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)

    problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...

  5. codeforces 416C C. Booking System(贪心)

    题目链接: codeforces 416C 题目大意: 给出n个请求,每个请求包括客人数量和支付金额,再给出m个桌子,包括桌子大小,问如何安排才能最大盈利.给出最大盈利和一个能够最大盈利的方案. 题目 ...

  6. Codeforces 540B School Marks 【贪心构造】

    题目链接:Codeforces 540B School Marks Little Vova studies programming in an elite school. Vova and his c ...

  7. CodeForces 508E Arthur and Brackets 贪心

    题目: E. Arthur and Brackets time limit per test 2 seconds memory limit per test 128 megabytes input s ...

  8. Codeforces 797C Minimal string【贪心】

    题意: 给出了字符串s的内容,字符串t,u初始默认为空,允许做两种操作: 1.把s字符串第一个字符转移到t字符串最后. 2.把t字符串最后一个字符转移到u字符串最后. 最后要求s.t字符串都为空,问u ...

  9. codeforces 719C (复杂模拟-四舍五入-贪心)

    题目链接:http://codeforces.com/problemset/problem/719/C 题目大意: 留坑... 转载于:https://www.cnblogs.com/A--Q/p/5 ...

  10. CodeForces - 803C Maximal GCD(贪心 + 枚举)

    链接一 链接二 You are given positive integer number n. You should create such strictly increasing sequence ...

最新文章

  1. RDKit | 比较分子之间的相似性
  2. 利用jvisualvm分析JVM,进行性能调优
  3. 自动开料机器人_工业4.0智能家具无人化生产线 自动化无人化大势所趋
  4. GDCM:iU22原始数据提取器的测试程序
  5. .Net5 WPF快速入门系列教程
  6. 前端学习(973):移动端其他插件使用
  7. tomcat CATALINA_HOME与CATALINA_BASE的区别
  8. 马斯克又有新麻烦上身!前员工将他告到美国证监会,曝出一大堆惊天八卦
  9. [转载] python自带sqlite库_Python内置库SQlite3使用指南
  10. IIS SSL证书 指定的登录会话不存在,可能已被终止 HRESULT:0x80070520
  11. uniwebview按钮被无形遮挡问题
  12. 干货分享:【IT-PMP学堂】PMP 文档与配置管理
  13. 关于富文本编辑器的图片处理
  14. 《所谓情商高就是会说话》
  15. pandas使用速查表
  16. 带声调的拼音转拼音+数字
  17. mysql dba项目经验_MySQL数据库专家分享资深DBA经验
  18. 【元胞自动机】基于元胞自动机模拟双通道人群疏散含Matlab源码
  19. Android中Webview显示全屏拉伸图片
  20. Pycharm社区版下载与安装教程

热门文章

  1. xcode 中生成和打包 ipa文件的方法和步骤
  2. 虚拟专用网络安全技术
  3. lvs realserver 配置VIP
  4. 安全知识、工具网址集锦(持续更新)
  5. 亲爱的程序猿们怎么找工作
  6. Java 并发编程(一):简介
  7. linux路由表怎么看懂,教你读懂Linux路由表
  8. 输入整形 matlab仿真
  9. 计算机表格斜线怎么打字上去,excel表格斜杠怎么分割打字,表格画线怎么画斜线...
  10. 数字电路中几种基本门电路