ZOJ 3469 Food Delivery(区间DP)
https://vjudge.net/problem/ZOJ-3469
题意:
在一条直线上有一个餐厅和n个订餐的人,每个人都有随时间上升的不满意值,从餐厅出发,计算出送完时最小的不满意值总和。
思路:
这道题和UVa 1632这道题目很像,只不过1632可以从任一点出发,而这题必须从餐厅出发。1632每个坐标几秒之后就会消失,这题是每分钟不满意值会上升,比较类似,都是挺不错的区间DP题。
d[i][j][0]代表的是在送完i~j这个区间的最小不满意值,并且此时人处于左端,d[i][j][1]则是人处于右端。
状态转移的话看代码吧,d[i][j][]的话可以从d[i+1][j][]过来,也可以从d[i][j-1][]过来。
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std; #define INF 0x3f3f3f3f
const int maxn = + ; int n, v, x; struct node
{
int x, b;
}p[maxn]; int sum[maxn];
int d[maxn][maxn][]; bool cmp(node a, node b)
{
return a.x < b.x;
} int main()
{
//freopen("D:\\txt.txt", "r", stdin);
while (cin >> n >> v >> x)
{
for (int i = ; i < n; i++)
cin >> p[i].x >> p[i].b; //出发点
p[n].x = x;
p[n].b = ;
sort(p, p + n +, cmp); for (int i = ; i <= n; i++)
for (int j = ; j <= n; j++)
d[i][j][] = d[i][j][] = INF; //前i个顾客的不满意度之和
sum[] = p[].b;
for (int i = ; i <= n; i++)
{
sum[i] = sum[i - ] + p[i].b;
} int k;
for (int i = ; i <= n; i++)
{
if (p[i].x == x)
{
d[i][i][] = d[i][i][] = ;
k = i;
break;
}
} for (int i = k; i >= ;i--)
for (int j = k; j <= n; j++)
{
if (i == j) continue;
d[i][j][] = min(d[i][j][], d[i + ][j][] + (p[i + ].x - p[i].x)*(sum[n] + sum[i] - sum[j]));
d[i][j][] = min(d[i][j][], d[i + ][j][] + (p[j].x - p[i].x)*(sum[n] + sum[i] - sum[j]));
d[i][j][] = min(d[i][j][], d[i][j - ][] + (p[j].x - p[j - ].x)*(sum[n] - sum[j - ] + sum[i - ]));
d[i][j][] = min(d[i][j][], d[i][j - ][] + (p[j].x - p[i].x)*(sum[n] - sum[j - ] + sum[i - ]));
}
cout << min(d[][n][], d[][n][])*v << endl;
}
}
ZOJ 3469 Food Delivery(区间DP)的更多相关文章
- ZOJ 3469 Food Delivery 区间DP
这道题我不会,看了网上的题解才会的,涨了姿势,现阶段还是感觉区间DP比较难,主要是太弱...QAQ 思路中其实有贪心的意思,n个住户加一个商店,分布在一维直线上,应该是从商店开始,先向两边距离近的送, ...
- zoj 3469 Food Delivery 区间dp + 提前计算费用
Time Limit: 2 Seconds Memory Limit: 65536 KB When we are focusing on solving problems, we usual ...
- ZOJ - 3469 Food Delivery (区间dp)
When we are focusing on solving problems, we usually prefer to stay in front of computers rather tha ...
- ZOJ 3469 Food Delivery(区间DP好题)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4255 题目大意:在x轴上有n个客人,每个客人每分钟增加的愤怒值不同. ...
- ZOJ 3469Food Delivery(区间DP)
Food Delivery Time Limit: 2 Seconds Memory Limit: 65536 KB When we are focusing on solving prob ...
- ZOJ3469 Food Delivery —— 区间DP
题目链接:https://vjudge.net/problem/ZOJ-3469 Food Delivery Time Limit: 2 Seconds Memory Limit: 6553 ...
- [ZOJ]3541 Last Puzzle (区间DP)
ZOJ 3541 题目大意:有n个按钮,第i个按钮在按下ti 时间后回自动弹起,每个开关的位置是di,问什么策略按开关可以使所有的开关同时处于按下状态 Description There is one ...
- ZOJ3469 Food Delivery 区间DP
题意:有一家快餐店送外卖,现在同时有n个家庭打进电话订购,送货员得以V-1的速度一家一家的运送,但是每一个家庭都有一个不开心的值,每分钟都会增加一倍,值达到一定程度,该家庭将不会再订购外卖了,现在为了 ...
- ZOJ 3469 Food Delivery (区间DP,经典)
题意: 在x轴上有一家外卖餐馆,有n个顾客站在x轴上不同坐标上且叫了外卖,每个人的脾气不同,每1分钟没有收到外卖就会增加Fi点愤怒值,而外卖小哥的车是有速度的v-1/分钟,问怎样的送餐次序会让所有顾客 ...
随机推荐
- vuex使用
1.装包:npm install vuex -S 2.引入:import Vuex from 'vuex' //这些都是写在man.js中 3.加载到Vue中:Vue.use(Vuex) 4 ...
- 7.MQTT网页客户端连接MQTT服务器的问题WebSocket connection to 'ws://XXX:1883/' failed: Connection closed before receiving a handshake response
问题描述:MQTT.js提供了连接MQTT的一套javascipt的方法,可供前端连接到MQTT服务器,也可以作为脚本测试.以脚本形式,用nodejs运行,是没有问题的,能够正常连接并且发送报文.但是 ...
- redis5.0主从配置
1.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz .tar.gz cd redis- make make test //检查 ...
- Spark SQL入门用法与原理分析
Spark SQL是为了让开发人员摆脱自己编写RDD等原生Spark代码而产生的,开发人员只需要写一句SQL语句或者调用API,就能生成(翻译成)对应的SparkJob代码并去执行,开发变得更简洁 注 ...
- linux中的各种$号 位置参数变量
位置参数变量 $n #/bin/bash echo $0(代表命令本身); echo $1; (代表第几个参数) echo $2; [root@LocalWeb01 ~]# ./1.sh ...
- python 文件写入与储存
python使用open()这个函数来打开文件返回对象: open 第二参数 "r" 以只读方式打开文件 "w" 以写入方法打开文件,会覆盖已储存的内容 &qu ...
- Devenv 命令行开关
Devenv 可用来设置集成开发环境 (IDE) 的各个选项,以及从命令行生成.调试和部署项目.使用这些开关从脚本或 .bat 文件(例如每夜生成的脚本)运行 IDE,或以特定配置启动 IDE. 说明 ...
- 线程等待——CountDownLatch使用
告警性能优化过程中,遇到如下问题:1. 在数据库计算几十万个实体的KPI值的方差:2. 计算结果进行表格化处理. 这里KPI包含多个Counter的数据库函数运算(比如Decode,AVG等函数),方 ...
- RPC框架原理剖析(含实例)(转)
转自:http://blog.csdn.net/rulon147/article/details/53814589 一.什么是RPC RPC(Remote Procedure Call Protoco ...
- C语言实现strlen函数的几种方法
原文地址:http://www.51testing.com/html/72/n-221172.html 传说常见的一个笔试题:不使用中间变量求const字符串长度,即实现求字符串长度库函数strlen ...