https://vjudge.net/problem/SPOJ-GCJ1C09C  <-----题目

大意:n组数据。一个监狱有p个并排的牢房,编号为1~p,一开始里面都有人,人可以通过牢房间的窗户通话。现在要释放q个人,一天放一个,每放一个就要给他那一排(左右直到尽头或者空牢房)每人都贿赂一枚金币。现在给你这q个人的名单,要求你求出释放他们所需要付出最小的金币数。

一开始我以为是自由选择释放的人,贪心策略都想好了,然后忽然发现是题目给的释放名单。。

由于我没想到怎么用dp做, 我是看了网上的代码才A出来的。。。

dp[i][j] 表示释放i~j的人(不含i,j)所要付出的最小金币。注意:这里的i,j表示的数组下标是那q个要释放的人而不是全部的人。

状态转移:  从释放k作为开始到全部释放所需要的最小金币= 释放1~(k-1)所需要的最小金币+释放(k+1)~p所需要的最小金币+释放k这单次要的金币

那么最后dp[0][p+1]就是答案,代码:

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=10005;
int dp[105][105],num[105];
int main(){int times; cin>>times;for(int cnt=1;cnt<=times;cnt++){int n,q; cin>>n>>q;for(int i=1;i<=q;i++) scanf("%d",&num[i]);num[0]=0; num[q+1]=n+1; //因为dp i,j都不含,所以要加这个 memset(dp,0,sizeof(dp));for(int dis=2;dis<=q+1;dis++){int end=q+1-dis;for(int i=0;i<=end;i++){int j=i+dis,temp=INF;for(int k=i+1;k<j;k++){ //不确定从那个开始释放最小,那么就都计算一次,把最小的找出来 temp=min(temp,dp[i][k]+dp[k][j]);}dp[i][j]=temp+num[j]-num[i]-2; //状态转移方程嘛 }}cout<<"Case #"<<cnt<<": "<<dp[0][q+1]<<endl;}return 0;
}

其实关于这道题我试过dp[i][j] 表示释放i~j 所需要的最小金币(含i~j),发现怎么改都改不出答案(个人能力有限)。。。

SPOJ - GCJ1C09C Bribe the Prisoners相关推荐

  1. spoj#GCJ1C09C - Bribe the Prisoners

    Problem In a kingdom there are prison cells (numbered 1 to P) built to form a straight line segment. ...

  2. [区间记忆化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点单独处理的最值 这题关键:释放某个囚犯后,就把囚犯分成两段,两段互相独立 这类d ...

  3. Bribe the Prisoners SPOJ - GCJ1C09C

    滴答滴答---题目链接 贿赂囚犯 Bribe the prisoners ( 动态规划+剪枝) Problem In a kingdom there are prison cells (numbere ...

  4. Bribe the Prisoners 菜鸟的记录

    Bribe the Prisoners 题目大意 有一个监狱里有一排牢房1-P,其中住着一些囚犯.现在要释放一些囚犯Q, 当释放一个囚犯的时候,要给两边所有的囚犯每人一枚金币, 直到遇到空牢房或者尽头 ...

  5. Bribe the Prisoners

    题目描述 In a kingdom there are prison cells (numbered 1 to P) built to form a straight line segment. Ce ...

  6. 贿赂囚犯 Bribe the prisoners (动态规划)

    问题描述: Problem In a kingdom there are prison cells (numbered 1 to P) built to form a straight line se ...

  7. 刷题: bribe the prisoners(2009 Round 1C C)

    题目描述 In a kingdom there are prison cells (numbered 1 to P) built to form a straight line segment. Ce ...

  8. 编程题-贿赂囚犯(Bribe the prisoners)-动态规划|剪枝

    转载请注明出处:http://blog.csdn.net/Lizo_Is_Me/article/details/43735509 问题描述: 一个监狱里有P个并排着的牢房,从左往右一次编号为1,2,- ...

  9. 贿赂囚犯 Bribe the prisoners ( 动态规划+剪枝)

    一个监狱里有P个并排着的牢房,从左往右一次编号为1,2,-,P.最初所有牢房里面都住着一个囚犯.现在要释放一些囚犯.如果释放某个牢房里的囚犯,必须要贿赂两边所有的囚犯一个金币,直到监狱的两端或者空牢房 ...

最新文章

  1. wxpython多个面板_wxpython:隐藏其中一个拆分窗口面板
  2. 为什么用C而不用C++
  3. python写水仙花的作文_python自动打开浏览器下载zip,并且提取内容写入excel
  4. SAP UI 搜索分页技术
  5. WPF中的鼠标事件详解
  6. ARM LDR与MOV的区别
  7. python3数据类型_python3中到底有几类数据类型?
  8. activity绑定service
  9. ibm服务器刷主板系统,ibm bios 升级图解 ibm服务器进入bios/升级程序
  10. 树莓派学习(二):摄像头模块的安装和使用
  11. 企业微信api接口,企业微信sdk
  12. c语言打码软件官方下载,触动精灵人工打码软件
  13. 使用GSON解析JSON数据
  14. python体重转换_Python第十二课 计算体脂率2.0
  15. Linux iptables常用命令
  16. 2022年帝国CMS7.5内核精仿《5288商机网》二次开发多个功能,运营级
  17. 2022年最新年终奖个人所得税计算计算方法及扣税标准
  18. c语言小蜜蜂编程题,小蜜蜂 pascal程序
  19. sql 语句 还原数据库
  20. Nginx代理服务器的安装及 开机启动配置

热门文章

  1. 拜托,面试请不要再问我Spring Cloud底层原理
  2. 火影推荐程序连载32-我是如何使用freemarker生成Word文件的?
  3. 阿里2018博士生校招启动—博出位!
  4. 2021.04.13 html学习第一天
  5. 南大通用数据库-Gbase-8a-学习-34-gcdump(导出数据库对象定义)
  6. vts传感器采取船舶的_船舶交通服务系统介绍
  7. 秘密福利偷偷分享!!!就此一天!!!过后删!!!
  8. 习题 6.20 用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数。整数和n在主函数中输入。最后在主函数中输出。
  9. 基于 DevOps 实践的 .NET Core 给开发者带来了哪些好处?
  10. html5 strongeaseinout,HTML5新特性 之canvas标签(Day1-4)(示例代码)