要我唱几首歌才能够将你捕捉

题意:

有N种颜色的牛,现在可以执行以下两种操作:

1.抓捕一只牛,代价为ai; 2.花费x的代价使用魔法,让所有颜色加1,N会变为1。

求得到N种颜色的牛最少花费的代价。

题解:

这题挺巧妙的,我一开始想的是贪心,找到每头牛最好从哪头牛更新过来,后来就WA了很多次...因为对施用魔法的情况不能很好地处理。

其实这题可以想:每种颜色的产生都需要一开始选取一头牛,并且经过X次魔法操作(0<=X<=N-1)才行,这里是关键。

根据上面,我们可以得知对于两种颜色i,j,假定他们分别从a,b转移过来,那么通过max(j-b,i-a)次魔法操作肯定可以从a,b转移到i,j。

假定我们现在最多使用k次魔法并且已经得知了每种颜色从哪个位置转移过来,那么现在肯定使用k次魔法可以得到目前的最小结果(可以模拟一下,有些转移我们并不一定需要把k次魔法用完,但有些可能就需要,这样的话就能对施用魔法的情况进行一个好的处理了)。

所以我们可以枚举使用魔法的次数(限定之)为k,我们每头牛最多就只能从[i-k,i]中ai的最小值更新过来,最后统计结果就好了。

这里不可能存在这种情况:相同位置的牛用相同的魔法次数。所以可以保证贪心策略的正确性。

代码如下:

#include <bits/stdc++.h>
#define INF 99999999999999999
using namespace std;
typedef long long ll;
const int N = ;
ll a[N];
ll minx[N][N];
ll n,x; int main(){
scanf("%I64d%I64d",&n,&x);
for(int i=;i<=n;i++) scanf("%I64d",&a[i]);
for(int i=;i<=n;i++) for(int j=;j<=n;j++) minx[i][j]=INF;
for(int i=;i<=n;i++){
ll t=INF;
for(int j=i;j<=n;j++){
t=min(a[j],t);
minx[i][j]=t;
}
}
ll ans=INF;
for(int k=;k<=n-;k++){
ll tmp=;
for(int i=;i<=n;i++){
int now=i-k;
if(now<){
now+=n;
tmp+=min(minx[][i],minx[now][n]);
}else tmp+=minx[now][i];
}
ans=min(ans,tmp+(ll)k*x);
}
cout<<ans;
return ;
}

最新文章

  1. [WCF]DomainServices客户端操作异常处理
  2. XtraBackup备份笔记
  3. Merry Christmas &amp; Happy New Year!!
  4. Apache+php+mysql+SQLyog在windows7下的安装与配置图解
  5. struts2 javaweb 过滤器、监听器 拦截器 原理
  6. 【Win 10应用开发】如何知道当前APP在哪个平台设备上运行
  7. POJ 2480 求每一个数对于n的最大公约数的和
  8. Oracle PL/SQL高级应用 存储过程
  9. C++ 多态性浅谈
  10. UVa1339 Ancient Cipher
  11. Python基础篇-day2
  12. Spark认识&amp;环境搭建&amp;运行第一个Spark程序
  13. Linux实践篇--crontab定时任务
  14. STP协议
  15. RestTemplate 微信接口 text/plain HttpMessageConverter
  16. Tomcat 一般异常处理方式
  17. 4. Tomcat内存溢出解决
  18. (转)关于Class.getResource和ClassLoader.getResource的路径问题
  19. Awk 从入门到放弃 (7) 动作总结之二
  20. HTML页面的重绘(repaint)和重流(reflow)

热门文章

  1. python并发编程之多进程、多线程、异步、协程、通信队列Queue和池Pool的实现和应用
  2. 量化交易之 tushare
  3. stm32f103 time2配置,转载
  4. windows 安装 .net core 环境
  5. P1016 旅行家的预算
  6. A problem occurred evaluating project ':'. > ASCII
  7. ADB常用指令
  8. Windows系统的高效使用
  9. 11-Mysql数据库----单表查询
  10. LeetCode - 20. Valid Parentheses(0ms)