SPOJ - GCJ1C09C 释放囚犯 ——————区间dp

P1622 释放囚犯题解 前言:这是本蒟蒻第一次提交动态规划的题解,大佬勿喷。 这道题是道区间DP的好题啊!首先,我想到的是 fi,jf_{i,j}fi,j​ 来表示释放第 iii 到第 jjj 个犯人要给的最少的肉。但是,空间和时间显得太大了。因为数据范围里说了 ppp 较小,于是我们就将要释放囚犯的范围从小到大排列。 将 fi,jf_{i,j}fi,j​ 来表示第 iii 个要释放的犯人到第 jjj 个要释放的犯人最少需要的肉,所以状态转移方程为: f[i][j]=min(f[i][j],f[i][k−1]+f[k+1][j]+ 阅读详情

GCJ1C09C - Bribe the Prisoners

Problem

In a kingdom there are prison cells (numbered 1 to P) built to form a straight line segment. Cells number i and i+1 are adjacent, and prisoners in adjacent cells are called “neighbours.” A wall with a window separates adjacent cells, and neighbours can communicate through that window.

All prisoners live in peace until a prisoner is released. When that happens, the released prisoner’s neighbours find out, and each communicates this to his other neighbour. That prisoner passes it on to his other neighbour, and so on until they reach a prisoner with no other neighbour (because he is in cell 1, or in cell P, or the other adjacent cell is empty). A prisoner who discovers that another prisoner has been released will angrily break everything in his cell, unless he is bribed with a gold coin. So, after releasing a prisoner in cell A, all prisoners housed on either side of cell A - until cell 1, cell P or an empty cell - need to be bribed.

Assume that each prison cell is initially occupied by exactly one prisoner, and that only one prisoner can be released per day. Given the list of Q prisoners to be released in Q days, find the minimum total number of gold coins needed as bribes if the prisoners may be released in any order.

Note that each bribe only has an effect for one day. If a prisoner who was bribed yesterday hears about another released prisoner today, then he needs to be bribed again.

Input

The first line of input gives the number of cases, N. N test cases follow. Each case consists of 2 lines. The first line is formatted as

P Q

where P is the number of prison cells and Q is the number of prisoners to be released.
This will be followed by a line with Q distinct cell numbers (of the prisoners to be released), space separated, sorted in ascending order.

Output
For each test case, output one line in the format
Case #X: C
where X is the case number, starting from 1, and C is the minimum number of gold coins needed as bribes.

Limits
1 ≤ N ≤ 100
Q ≤ P
Each cell number is between 1 and P, inclusive.

Large dataset

1 ≤ P ≤ 10000
1 ≤ Q ≤ 100

Input
2
8 1
3
20 3
3 6 14

Output
Case #1: 7
Case #2: 35

Note
In the second sample case, you first release the person in cell 14, then cell 6, then cell 3. The number of gold coins needed is 19 + 12 + 4 = 35. If you instead release the person in cell 6 first, the cost will be 19 + 4 + 13 = 36.


白书129页的问题,转化为区间dp来解决

  • d p [ i ] [ j ] dp[i][j] dp[i][j]表示将第i个囚犯到第j个囚犯(不含两端)都释放是,所需要的最少金币个数
  • 我们把左端点当成0号囚犯,右端点当成q+1号囚犯,这样 d p [ 0 ] [ q + 1 ] dp[0][q+1] dp[0][q+1]就是答案
#include<bits/stdc++.h>
using namespace std;
const int MAXN=200+10;
int a[MAXN];
int dp[MAXN][MAXN];
int main()
{
        // freopen("../in.txt","r",stdin);
        // freopen("../out.txt","w",stdout);
	int n, p, q;
        scanf("%d",&n);
        int Case = 1;
        while(n--)
        {
                scanf("%d %d",&p,&q);
                for(int i=1;i<=q;++i)
                        scanf("%d",&a[i]);
                a[0] = 0;
                a[q+1] = p+1;
                for(int i=0;i<=q;++i)
                        dp[i][i+1] = 0;
                for(int w=2;w<=q+1;++w){
                        for(int i=0;i+w<=q+1;++i){

                                int j = i+w, t = 0x3f3f3f3f;

                                for(int k = i+1; k < j; ++k)
                                        t = min(t, dp[i][k]+dp[k][j]);

                                dp[i][j] = t + a[j] - a[i] - 2;
                        }
                }
                printf("Case #%d: %d\n",Case++,dp[0][q+1]);
        }
        return 0;
}
释放囚犯-c++题解 文章目录题目描述题目理解解题思路 题目来源:洛谷P1622 原题面 题目描述 Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气... 阅读详情

相关推荐

[A-21]ARMv8/v9-SMMU系统架构和功能概述

本文简述了SMMU的系统架构和核心功能

基层架构师的分享 1724

P1622 释放囚犯(区间dp)

P1622释放囚犯题意:思路:CodeCodeCode P1622释放囚犯 题意: p个牢房,q个要释放的人,两个监狱能够通信当且仅当两个监狱之间都有人,当释放某个监狱的人时,和他能够通信的监狱必须要吃肉,问要按什么样的顺序释放才能让所有人吃上的肉最少 思路: 区间dp,反过来思考,释放人,我们考虑先把要放的人全部清空,然后再抓进去(可以想到,最优情况的顺序下,正向和反向的答案相同) 这样一来,我们每次抓进去一个人,就合并两个区间,且加上区间人数。 dp[i][j]dp[i][j]dp[i][j]表示把第.

weixin_45363113的博客 244

SRAM故障排查实战:如何用Nano Prober定位6T存储单元的异常点

本文详细介绍了在SRAM故障排查中,如何运用Nano Prober(纳米探针)技术精准定位6T存储单元的内部异常。面对传统方法难以发现的电性参数漂移(如晶体管阈值电压偏移)或微小物理缺陷,Nano Prober能直接对单个6T单元内的晶体管进行I-V特性测量,结合失效模式分析,有效解决读写错误等疑难问题,是芯片失效分析的关键工具。

v5w6x的博客 664

GCJ1C09C - Bribe the Prisoners

GCJ1C09C - Bribe the Prisoners Problem In a kingdom there are prison cells (numbered 1 to P) built to form a straight line segment. Cells number i and i+1 are adjacent, and prisoners in adjacen...

weixin_30375427的博客 172

歪枣网股票数据下载接口汇总一

歪枣网上下载接口动态信息如下: 接口名称:A股列表,接口描述:沪深京A股基本信息,接口地址:/doc/getStockHSABaseInfo?code=all&fields=code,name,stype,hsgt,bk,roe,zgb,ltgb&export=0&token= 请求参数描述: 参数名:code,参数描述:股票代码,支持批量查询,用逗号分隔,每次最多30个;若为all,则表示全部,即可获取任意一天内的所有数据。 请求参数描述: 参数名:fields,参数描述:数据字段

waizaowang的博客 2731

离线安装PlutoSDR硬件支持包全攻略:没有MathWorks账号也能搞定MATLAB集成

本文详细介绍了在没有MathWorks账号和网络环境的情况下,如何离线安装PlutoSDR硬件支持包并实现MATLAB集成的完整解决方案。从驱动安装、设备识别到MATLAB支持包的离线部署,提供了全面的步骤指导和常见问题排查方法,特别适合高校实验室、军工单位等内网环境使用。

js777的博客 266

P1622 释放囚犯-区间DP

释放囚犯 - 洛谷 释放第一个囚犯的过程就是把整个区间分成两个子区间的过程,代价是两边人数和。而对于新形成的两个子区间,又可以按照类似方法实现划分。那么完全可以把整个过程倒过来,通过小区间合并来形成最终大区间即可。 预处理出来m个人分出来的m+1个区间,这些区间并不包含释放的人,我们枚举断点的时候还要算上断点之外,区间之外的人,也就是大区间拆分时还没释放的人; #include <iostream> # include<algorithm> using namespa

jisuanji2606414的博客 410

【科研学习】Demo3D2015安装包以及图文安装步骤

安装包 点击下图的.exe文件,安装 不需要解压,打开注册机 如下图: 点击上图的.exe文件,出现下图 先点击 patch 打开安装目录下的Demo3D.licensing.dll文件,然后点击Generate,生成dvt-license文件,保存即可 打开安装完成的Demo3D 2015(64-bit),一般破解没完成的,会出现一个request a license 的问题,点击find license 的那一行 点击后找到自己Generate,生成dvt

KaelCui的博客 1万+

SPOJ-Problem GCJ1C09C

这是一个非常棒的dynamic programming问题,原题的链接在这里:SPOJ Problem GCJ1C09C 题目的大致意思如下: 一个监狱里有P个并排的牢房,从左至右依次编号为1,2,...,P。最初所有的牢房里面都有一个犯人。相邻的两个牢房之间又一个窗户,可以通过它与相邻牢房里的囚犯对话。现在要释放一些囚犯。如果释放某个牢房里的囚犯,其相邻的牢房里的囚犯就会知道,因而会发生暴动

kornberg_fresnel的博客 793

从零构建PEMFC仿真模型:MATLAB/Simulink中的模块化拆解与系统集成

本文详细介绍了如何在MATLAB/Simulink环境中从零构建质子交换膜燃料电池(PEMFC)仿真模型,包括电化学模型、气体供应系统和热管理系统的模块化实现。通过多物理场耦合技巧和系统集成策略,帮助工程师和研究者高效开发PEMFC控制策略,优化性能并实现实时仿真。

weixin_29294975的博客 360

GEE案例:Landsat 5、7、8影像构建1985-2023年rsei生态遥感指数详细代码

rsei(Regional Silviculture Ecological Index,地区林业生态指数)是一种生态遥感指标,用于评估森林生态系统的健康状况和生态服务。构建1985-2023年的rsei生态遥感指,主要需要使用Landsat 5、7和8的遥感影像数据。以下是一种可能的构建方法:1. 数据获取:从美国地质调查局(USGS)或其他可靠数据提供商处获取Landsat 5、7和8的遥感影像数据。确保选择的影像具有适当的空间和时间分辨率,以覆盖所需的时间段。

此星光明博客 3409

***SPOJ - GCJ1C09C Bribe the Prisoners【贿赂囚犯】

原题链接题目: n 组测试数据,有p个人在监狱,要放出q个人,这些人的编号为a[1]~a[q],每放出一个人,他周围的人(两边连续的直到碰到空的监狱或者尽头)都要贿赂1枚金币,问最少花费多少金币。

tjx41624560的博客 707

基于Dify实现对Excel的数据分析

在dify部署完成后,大家就可以基于此进行各种应用场景建设,目前dify支持聊天助手(包括对话工作流)、工作流、agent等模式的场景建设,我们在日常工作中经常会遇到各种各样的数据清洗、格式转换处理、数据统计成图等数据分析工作,本次主要基于对话工作流模式对Excel文件、csv文件进行解析处理,并进行成图等数据分析工作。主要用到的插件有LLM节点,文档提取器、参数提取器、自定义代码节点、echart插件等。实现解析Excel数据,经过上述不同节点的处理分析流程,最终实现数据统计图展示。

hhue2007的专栏 1万+

Bribe the Prisoners SPOJ - GCJ1C09C

Problem In a kingdom there are prison cells (numbered 1 toP) built to form a straight line segment. Cells numberiandi+1are adjacent, and prisoners in adjacent cells are called "neighbours." A wa...

weixin_34341117的博客 87

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[区间记忆化dp入门][Bribe the Prisoners SPOJ - GCJ1C09C][Codeforces Round #505D (rated, Div. 1 + Div. 2, ba]

Bribe the Prisoners SPOJ - GCJ1C09C 作为这类题代表,f[i][j]代表第i点到第j点单独处理的最值 这题关键:释放某个囚犯后,就把囚犯分成两段,两段互相独立  这类dp问题的突破口在于一个点能把问题分成两段,两段互相独立,这两段的限制条件只与l-1,r+1有关,记忆化搜索,时间复杂度o(n*n*n) #include&lt;bits/stdc++.h&...

Wall-E 521

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

囚犯 动态规划

囚犯 题目描述 阴差阳错,小Q穿越到了明朝成为了一名狱卒头头。恰逢皇帝大寿,准备大赦天下。当然,大赦不是全赦,不然社会就全乱了。小Q所在的监狱有P个牢,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。相邻牢房的囚犯可以交流,现在正好牢房是满的。 现在小Q拿到了释放名单,并被要求每天释放一人。但问题是现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会...

Bell的博客 569

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

P1622 释放囚犯-动态规划,区间dp

Caima王国中有一个奇怪的监狱,这个监狱一共有P个牢房,这些牢房一字排开,第i个紧挨着第i+1个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的P个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气愤,导致他们那天会一直大吼大叫,搞得看守很头疼。如果给这些要发火的人吃上肉...

LingFengGold 711

洛谷 P1622 释放囚犯(区间dp)

表示这个区间内罪犯的人数,最后。是因为不需要给释放的罪犯喂肉。

weixin_74754298的博客 481

洛谷P1622 释放囚犯【区间DP】【绿】

Date:2022.03.22 题目描述 Caima 王国中有一个奇怪的监狱,这个监狱一共有 P 个牢房,这些牢房一字排开,第 i 个紧挨着第 i+1 个(最后一个除外)。现在正好牢房是满的。 上级下发了一个释放名单,要求每天释放名单上的一个人。这可把看守们吓得不轻,因为看守们知道,现在牢房中的 P 个人,可以相互之间传话。如果某个人离开了,那么原来和这个人能说上话的人,都会很气愤,导致他们那天会一直大吼大叫,搞得看守很头疼。如果给这些要发火的人吃上肉,他们就会安静点。 输入格式 第一行两个整数 PP 和

lppppppppps的博客 531

洛谷题目目录

#1 新手村 关卡1-1 洛谷的第一个任务 超级玛丽游戏(洛谷-P1000):点击这里 A+B Problem(洛谷-P1001):点击这里 小玉买文具(洛谷-P1421):点击这里 小鱼的游泳时间(洛谷-P1425):点击这里 关卡1-2 顺序与分支 小玉家的电费(洛谷-P1422):点击这里 不高兴的津津(洛谷-P1085):点击这里 津津的储蓄计划(洛谷-P1089):点击这里 买铅笔(洛谷...

zqhf123的博客 25万+

8/4总结

今天主要复习了DP相关的一些内容,另外在洛谷上找了两个提高的题找找感觉。 P3146 [USACO16OPEN]248 G 洛谷链接 题意:给定一个1*n的地图,在里面玩2048,每次可以合并相邻两个(数值范围1-40),问最大能合出多少。注意合并后的数值并非加倍而是+1,例如2与2合并后的数值为3。 思路:基本可以算是模板题,dp[i][j]表示区间i—j可以合成的最大数。转移方程:if(f[l][k]==f[k+1][r])f[l][r]=max(f[l][r],f[l][k]+1)。注意对f数组赋初值

qq1476318201的博客 220

动态规划 区间dp

p1388,p1622 区间dp

weixin_52621204的博客 208

GCJ2012 1C Problem A. Diamond Inheritance

简单的图问题

361

P1622 释放囚犯 (区间dp)

原题链接:释放囚犯 - 洛谷 思路:反着考虑其实就是区间dp,类似石子合并问题,不同点是每次合并的时候记得把断点的个数加上而且要减去一个断点(每次合并的时候都是一个断点的两边进行合并) 注意初始化其实就是len为1的时候即f[i][i] = 0(对单独一堆石子的操作代价为0)。 AC代码: #include<bits/stdc++.h> #define INF 0x3f3f3f3f #define ll long long #define PII pair<i...

qq_52313416的博客 381

洛谷 P1622 释放囚犯【区间dp】

首先题目说了释放的人的所在牢房编号按递增的顺序给出,所以不需要在排序了,现在唯一影响吃肉数量的因素就是释放的顺序,先释放谁后释放谁的问题,对于一个区间[l,r],我们考虑最后一个释放的位置为k,那么释放k之后,就会形成俩个新的需要处理的区间f[l,k-1],f[k+1,r],这个不就是经典的区间dp了吗,然后我们考虑区间dp进行处理即可。现在正好牢房是满的。最后一步是处理k,a[r+1]-a[l-1]-1表示的是区间[l,r]数的个数,我们释放k,所以需要吃肉的数量为a[r+1]-a[l-1]-1-1。

lianxuhanshu_的博客 1263
上一篇: POJ 1182食物链————并查集复习
下一篇: POJ 3723 Conscription——————求森林最大权
陶鸿杰
博客等级 码龄9年 93粉丝 298原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值