博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1622 释放囚犯
阅读量:5077 次
发布时间:2019-06-12

本文共 1341 字,大约阅读时间需要 4 分钟。

题目描述

Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。

上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气愤,导致他们那天会一直大吼大叫,搞得看守很头疼。如果给这些要发火的人吃上肉,他们就会安静点。

输入格式

第一行两个数P和Q,Q表示释放名单上的人数;

第二行Q个数,表示要释放哪些人。

【数据规模】

对于100%的数据1≤P≤1000; 1≤Q≤100;Q≤P;且50%的数据 1≤P≤100;1≤Q≤5

输出格式

仅一行,表示最少要给多少人次送肉吃。

输入输出样例

输入 #1复制
20 33 6 14
输出 #1复制
35

说明/提示

【样例说明】

先释放14号监狱中的罪犯,要给1到13号监狱和15到20号监狱中的19人送肉吃;再释放6号监狱中的罪犯,要给1到5号监狱和7到13号监狱中的12人送肉吃;最后释放3号监狱中的罪犯,要给1到2号监狱和4到5号监狱中的4人送肉吃。

 

死磕背包中……

 

区间DP吧,要枚举分界点

 

#include
#include
using namespace std;int n,m,l,i,j,k;int a[1000];int f[1000][1000];inline int read(){ int s=0,w=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-'){ w=-1; } ch=getchar(); } while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); } return s*w;}int main(){ n=read(); m=read(); for(i=1;i<=m;i++){ a[i]=read(); } sort(a+1,a+m+1); a[0]=0; a[m+1]=n+1; for(l=1;l<=m;l++){ for(i=1;i+l-1<=m;i++){ j=i+l-1; f[i][j]=999999999; for(k=i;k<=j;k++){ f[i][j]=min(f[i][j],f[i][k-1]+f[k+1][j]+a[j+1]-a[i-1]-1-1); } } } printf("%d",f[1][m]); }

 

转载于:https://www.cnblogs.com/hrj1/p/11449592.html

你可能感兴趣的文章
window.event在IE和Firefox的异同
查看>>
常见的js算法面试题收集,es6实现
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Windows10 下Apache服务器搭建
查看>>
HDU 5458 Stability
查看>>
左手坐标系和右手坐标系
查看>>
solr后台操作Documents之增删改查
查看>>
http://yusi123.com/
查看>>
文件文本的操作
查看>>
Ubuntu linux下gcc版本切换
查看>>
记一次Web服务的性能调优
查看>>
Linux常用命令大全
查看>>
jQuery.form.js使用
查看>>
(转)linux sort,uniq,cut,wc命令详解
查看>>
关于ExecuteNonQuery执行的返回值(SQL语句、存储过程)
查看>>
UVa540 Team Queue(队列queue)
查看>>
mysql数据增删改查
查看>>
shell中下载最新版本或指定版本的办法(Dockerfile 中通用)
查看>>
极客时间-左耳听风-程序员攻略-分布式架构工程设计
查看>>
akka之种子节点
查看>>