题目大意:一个圆圈中有很多n个点(包括起点),其中除了起点外其他点除都有需要送的包裹。现在已经迟到了,而每到一个点处送了包裹都要因为迟到而每迟到1min扣和包裹数相同的钱。给定n和每个点的包裹数还有前一个点到下一个点的时间(来回一样),求最少需要赔的钱。   一类折线问题的DP --- 以某个点位中心,不断扩展两边折返,形成区间更新 clock_time[i]0到i点时间。顺时针 anti_clock_time[i]i到0点时间。逆时针 w[i][j]i到j有的包裹总数。 l[i][j]表示站在i处要处理i到j最少需要赔的钱 r[i][j]表示站在j处要处理i到j最少需要赔的钱   现在来分析l[i][j](r[i][j]同理),即站在i处要处理i到j最少需要赔的钱,那么可以有两种情况:①先走到i+1,此时就变成了l[i+1][j],又因为先走了time[i]的时间(从i到i+1),所以i+1到j的处理时间都要推迟time[i],所以l[i][j] = min(l[i][j], l[i+1][j] + time[i]*w[i+1][j]);②先从外侧走到j,然后就是r[i+1][j],而此时先花掉的时间就是clock_time[i] + anti_clock_time[j](#),所以l[i][j] = min(l[i][j], r[i+1][j] + (#)*w[i+1][j])。 而最终的状态就是l\r[0][n-1] or l\r[1][0],但因为[1][0]表示不方便,所以我们在0..n-1的基础上增加一个n来表示0,这样l\r[1][0]就能表示成l\r[1][n],然后再综合一下,结果就是min(l[0][n], r[0][n])~~~(代码中因为n自增了1,所以那儿是[0][n-1])   代码:


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MID(x,y) ((x+y)>>1)
using namespace std;
typedef long long LL;const int sup = 1000000000;
const int N = 310;
int l[N][N], r[N][N], w[N][N];
int clock_time[N];
int anti_clock_time[N];
int time[N], num[N];
void init(int n){clock_time[0] = 0;for (int i = 1; i < N; i ++){clock_time[i] = clock_time[i-1] + time[i-1];}anti_clock_time[n] = 0;for (int i = n - 1; i >= 0; i --){anti_clock_time[i] = anti_clock_time[i+1] + time[i];}for (int i = 0; i < n; i ++){w[i][i] = num[i];for (int j = i + 1; j < n; j ++)w[i][j] = w[i][j-1] + num[j];}for (int i = 0; i < n; i ++)for (int j = 0; j < n; j ++){if (i == j){l[i][j] = 0;r[i][j] = 0;}else{l[i][j] = sup;r[i][j] = sup;}}return ;
}
int main(){int n;while(scanf("%d", &n) == 1){if (n == 0)break;for (int i = 0; i < n; i ++)scanf("%d%d", &num[i], &time[i]);num[n] = time[n] = 0;n ++;init(n);for (int k = 1; k < n; k ++){for (int i = 0; i + k < n; i ++){int j = i + k;l[i][j] = min(l[i+1][j] + time[i] * w[i+1][j], r[i+1][j] + (clock_time[i] + anti_clock_time[j]) * w[i+1][j]);r[i][j] = min(r[i][j-1] + time[j-1] * w[i][j-1], l[i][j-1] + (clock_time[i] + anti_clock_time[j]) * w[i][j-1]);}}printf("%d\n", min(l[0][n-1], r[0][n-1]));}return 0;
}

转载于:https://www.cnblogs.com/AbandonZHANG/archive/2013/03/12/4114009.html

POJ 2671 Jimmy's Bad Day ★ (区间DP)相关推荐

  1. 【POJ - 1651】Multiplication Puzzle(区间dp)

    题干: The multiplication puzzle is played with a row of cards, each containing a single positive integ ...

  2. poj 3186 Treats for the Cows (区间dp)

    题意:给你一个序列,每次只能从头或为取数,然后乘以这是第几个数,最后加和,是加和最大 思路:假设长度最开始是1,然后依次枚举长度,以及起点,dp[i][j]是又里面的两端点扩出来的(ps:代码不是这么 ...

  3. POJ 2955 Brackets (区间DP)

    题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  4. POJ 3186Treats for the Cows(区间DP)

    题目链接:http://poj.org/problem?id=3186 题目大意:给出的一系列的数字,可以看成一个双向队列,每次只能从队首或者队尾出队,第n个出队就拿这个数乘以n,最后将和加起来,求最 ...

  5. POJ 1651 Multiplication Puzzle(类似矩阵连乘 区间dp)

    传送门:http://poj.org/problem?id=1651 Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65536K T ...

  6. poj 1141(区间dp+打印路径)

    题意: 定义合法的括号序列如下: 1 空序列是一个合法的序列 2 如果S是合法的序列,则(S)和[S]也是合法的序列 3 如果A和B是合法的序列,则AB也是合法的序列 例如:下面的都是合法的括号序列 ...

  7. poj 3280(简单区间dp)

    题意:将一个字符串转换成回文串的最小花费. 解题思路:简单的区间dp,dp[i][j]表示从i到j的字符串转换成回文串的最小化费. #include<iostream> #include& ...

  8. POJ 1191 棋盘分割(区间DP)题解

    题意:中文题面 思路:不知道直接暴力枚举所有情况行不行... 我们可以把答案转化为 所以答案就是求xi2的最小值,那么我们可以直接用区间DP来写.设dp[x1][y1][x2][y2][k]为x1 y ...

  9. POJ 2176 Folding(区间DP)

    题意:给你一个字符串,请把字符串压缩的尽量短,并且输出最短的方案. 例如:AAAAA可压缩为5(A), NEERCYESYESYESNEERCYESYESYES可压缩为2(NEERC3(YES)). ...

最新文章

  1. mysql提取数据字符_如何从MySQL查询的字符串中提取数值?
  2. 各种语言下 static 详解
  3. Bootstrap File Input 真正 解决跨域问题
  4. python将索引升序_程序在Python中按升序删除元素后获取列表的索引
  5. fota mcsync洛达检测_【科普篇】华强北洛达1536U芯片下的苹果Airpods,与正品差距还有多少...
  6. matlab图像显示时间,请问怎么把样点数变成时间显示在图像了里
  7. OSGi:进入微服务架构的门户
  8. Bootstrap按钮的外观
  9. linux安装tomcat_Linux云服务器安装jdk、Tomcat、MySQL5.7 - 咸鱼落成
  10. 四川麻将java_四川麻将纯AI算法------最优拆牌
  11. Android学习笔记——文件路径(/mnt/sdcard/...)、Uri(content://media/external/...)学习
  12. Mybatis框架(一):一步步编写入门Mybatis程序(内附Mybatis各种配置文件)
  13. 生日祝福小程序_手边小程序新年祝福插件正式上线
  14. 基于数据库的企业内部邮件系统的设计
  15. H264视频压缩算法
  16. 页面自动更新(javascript)
  17. 蓄电池放电容量测试方法——TFN DC-E60150蓄电池放电容量测试仪
  18. DIV布局——化妆品商城-功能齐全(43页) HTML+CSS+JavaScript web大作业 静态网页
  19. 十分钟拥有你的私人博客!使用readthedocs和mkdocs完成你的文档托管。
  20. UMEditor配置

热门文章

  1. Qt笔记(四十)之Qt打开笔记本摄像头
  2. Pin API INS
  3. 【学习笔记】超实数(Surreal Number)和不平等博弈
  4. Win系统 - 更新卡太久,我能不能强制关机?
  5. 数据库截取某一字段的值
  6. 使用华为云跑自己的深度学习模型教程
  7. bat 打开常用软件
  8. vue 生成海报完整代码, (包括远程图片转base64、html2canvas 在IOS系统兼容的解决办法)
  9. 记录一次实战GetShell
  10. SSM分布式项目之淘淘商城-第一天(IDEA)