P2654 原核生物培养
P2654 原核生物培养
题目描述
W教授最近正在研究一种原核生物,这种生物的生长方式很奇特,只能通过吃掉同类而生长。两个该种生物相遇,较大质量的会把较小的吃掉(相同的话就看RP了),吃掉后较大的生物的质量会变为两只原核生物重量之和,但这个过程会消耗酶,消耗的酶近似为它们重量之和。
W教授现在有n只原核生物,他每次会从培养皿中取重量最小的m个生物进行实验,让它们自相残杀。
实验的操作是这样的,教授将这m个原核生物按某种重量大小的顺序放在一个环形的管道里,然后给其中相邻两只原核生物酶,如此反复。最后把剩下的那只放回培养皿,接着进行下次实验。W教授希望经过k次实验后耗能最少。输入数据保证,不会出现生物不够的情况。
输入输出格式
输入格式:
第一行有三个整数,分别为n,m,k
第二行有n个整数,代表最初n个生物的重量
接下来的k行,每行m个整数,第i+2行的第j个数代表第i次实验的第j小的生物放在哪个位置。例如m=5,第三行为,14235 代表最小的生物放在第一个位置,第二小的放第四个…最大的放在第五个位置(和第一个位置相邻)
输出格式:
只有一个整数,代表k次实验之后最小消耗酶的量。
输入输出样例
输入样例#1:
10 2 3
1 2 3 4 5 6 7 8 9 10
1 2
1 2
1 2
输出样例#1:
18
说明
1<n<=1000,1<=m<=10,1<=k<=100。数据保证结果不超过2^31。
样例解释:
第一次是用重量为1 2 消耗酶3 变为一个重量3
第二次是用重量为3 3 消耗酶6 变为一个重量6
第三次是用重量为4 5 消耗酶9 变为一个重量9
所以消耗总酶为18
做法
优先队列加dp
首先题目要求每次从序列中取出最小的m个元素然后一一合并
把仅剩的最后一个元素重新放回序列
重复这个过程k遍
所以只需要进行k遍石子合并就可以
然后用优先队列维护序列
#include<iostream>
#include<cstdio>
#include<queue>
#define N 105
#define INF 0x3f3f3f3f
using namespace std;
priority_queue<int,vector<int>,greater<int> > q;
int a[N],b[N],f[N][N],s[N];
int n,m,k,sum;
int read(){
char ch=getchar();int s=0;
for(;!isdigit(ch);ch=getchar());
for(;isdigit(ch);s=s*10+ch-'0',ch=getchar());
return s;
}
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
q.push(read());
while(k--){
int all=0;
for(int i=1;i<=m;i++){
int x=read();
a[x]=q.top();
q.pop();
all+=a[x];
}
q.push(all);
for(int i=1;i<=m;i++)
a[m+i]=a[i];
for(int i=1;i<=m<<1;i++)
s[i]=s[i-1]+a[i];
for(int l=2;l<=m;l++)
for(int i=1;i+l-1<m<<1;i++){
int j=i+l-1; f[i][j]=INF;
for(int k=i;k<j;k++){
int ans=f[i][k]+f[k+1][j]+s[j]-s[i-1];
if(f[i][j]>ans)
f[i][j]=ans;
}
}
int minn=INF;
for(int i=1;i<=m;i++)
if(f[i][i+m-1]<minn)
minn=f[i][i+m-1];
sum+=minn;
}
cout<<sum;
return 0;
}
P2654 原核生物培养的更多相关文章
- 课题:如何培养自己的SEO资源
课题:如何培养自己的SEO资源 问:做SEO最重要的是什么?[针对性的流量]答:看获取一样东西的门槛.稀缺性,人人可得价值不大外链 内容 流量[正确]针对性的自然流量是用户自愿带来的,价值高,能形成购 ...
- BAT线下战争:巨额投资或培养出自己最大对手(包括美团、58、饿了么在内的公司都在计划推出自己的支付工具和金融产品,腾讯只做2不做O)
BAT线下战争:巨额投资或培养出自己最大对手 2015年10月12日09:49 <财经>杂志 我有话说(18人参与) 收藏本文 BAT大举投资线下公司,看似咄咄逼人 ...
- faith的23堂课:培养良好的工作方法与做事风格
目标:通过每天一点的学习和实践,逐步形成好的做事风格和工作生活习惯. 方式:每天教一点,实践一点. 第一课 计划与总结,工作日志,戴明环 第二课 目的性:搞清楚,你每个行为的目的 第三课 目标管理,调 ...
- 什么是设计思维Design Thinking——风靡全球的创造力培养方法
“把学习带到现实中,让孩子用自己的力量创造改变,可以直接提升他们的幸福感和竞争力.” 这是“全球孩童创意行动”的发起人——Kiran Sethi在TED演讲时说的一句话,这个行动旨在引导中小学生主动寻 ...
- 以写作为例说下IT人如何培养挣钱DNA
洛克菲勒说:“如果把我剥得一文不名丢在沙漠的中央,只要一行驼队经过——我就可以重建整个王朝.”这话反过来可以这样说,方法不对路,也不肯干的人,哪怕给一笔财富(比如人生小目标一个亿),最好的结果是跑赢C ...
- 信息学奥赛辅导经验谈 & 问题教学法中的学生思维能力培养
转载来自朱全民名师工作室 信息学奥赛辅导经验谈 全国青少年信息学奥林匹克分区竞赛(简称NOI)是经中国科协.国家教育部批准,由中国计算机学会主办的一项全国性的青少年学科竞赛活动.随着信息学奥林匹克竞赛 ...
- 安晓辉大神的感悟:如果你发现了自己的学习模式,愿意学并且能坚持,我觉得没什么能阻挡你征服软件世界的脚步(对于开发人员来讲,最大的风险是:在职业规划上没有延续性地乱跳槽。时刻要牢记在心的:培养自己的稀缺性) good
从技术支持中途转战软件开发,如今从事编程工作已十多有余,2014年CSDN博文大赛编程语言组冠军.CSDN Qt论坛的版主安晓辉老师从今天开始,坐镇CSDN社区问答栏目的 第十四期,届时会接受广大网友 ...
- 测试系统工程师TSE的职责与培养
测试系统工程师TSE的职责与培养 研发资深顾问 杨学明 如今,国内所有的研发型的公司都有测试部门,无论测试团队大小,都有测试组长,测试经理,测试工程师等头衔,但随着产品和业务的质量要求越来越高,产品的 ...
- java高级特性(2)--循序渐进地培养面向对象的思维方式
在我踏入软件行业后,一直苦于没有前辈指点.我常年困惑于两个问题:一是怎样培养面向对象设计的思维能力?二是怎样进行架构设计,有无方法? 因为我做了那么多年项目,却很少看到有漂亮的面向对象思维写出来的代码 ...
随机推荐
- Python 异步编程笔记:asyncio
个人笔记,不保证正确. 虽然说看到很多人不看好 asyncio,但是这个东西还是必须学的.. 基于协程的异步,在很多语言中都有,学会了 Python 的,就一通百通. 一.生成器 generator ...
- 第16讲——C++中的代码重用
C++的一个主要目标是促进代码重用.除了我们之前学的公有继承,我们在这一讲将介绍另一种代码重用的方法——类模板.
- PostgreSQL 建库建表脚本
1.创建角色(create_role.sql) drop role if exists "kq_acs";create role "kq_acs" login ...
- sqlite sql语句关键字GROUP BY的理解
第一遍看GROUP BY的介绍时,没看懂. SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组.在 SELECT 语句中,GROUP BY 子句放在 W ...
- thinkphp3.2 常用单字母函数
U函数:用来生成url U('地址表达式',['参数'],['伪静态后缀'],['显示域名'] 例如: U('Blog/read?id=1') // 生成Blog控制器的read操作 并且id为1的U ...
- qemu的device参数解释 包括socket的一些知识
前面一片是driver,是把这个新的设备“插入到虚机中”,device 是准备驱动了.device 都是和设备配合使用的.要怎么去驱动一个设备,包括使用的驱动函数是啥,device后面的函数根据驱动的 ...
- 【bzoj1412】[ZJOI2009]狼和羊的故事 网络流最小割
题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈 ...
- hihocoder 后缀自动机专题
一.后缀自动机基本概念的理解 1.首先后缀自动机的状态是由子串的endpos来决定的 子串的endpos是指一个子串可以在原字符串的哪些位置进行匹配, endpos构成的不同集合划分成不同的状态 关于 ...
- 【题解】ZJOI2010贪吃的老鼠
%%%%真的好强...看题解我都看了好久才完全明白.放一下参考的博客,谢谢神犇QAQ 1号博客 2号博客(超级赞的啦) 因为理解的过程太艰辛,所以必须记录一下这道强题:这道题目最难的两个约束就在 ...
- 做一个所见即所得的CSS效果
style 也是标签(在非ie内核的浏览器中支持),我们将style设置成 contenteditable的时候,那么那的内容就可以编辑了.仔细的体验下,如果我们将背景修改成红色的.那么只要书写完,立 ...