ZOJ 3469Food Delivery(区间DP)
Food Delivery
Time Limit: 2 Seconds Memory Limit: 65536 KB
When we are focusing on solving problems, we usually prefer to stay in front of computers rather than go out for lunch. At this time, we may call for food delivery.
Suppose there are N people living in a straight street that is just lies on an X-coordinate axis. The ith person's coordinate is Xi meters.
And in the street there is a take-out restaurant which has coordinates X meters. One day at lunchtime, each person takes an order from the restaurant at the same time. As a worker in the restaurant, you need to start from the restaurant, send food
to the N people, and then come back to the restaurant. Your speed is V-1 meters per minute.
You know that the N people have different personal characters; therefore they have different feeling on the time their food arrives. Their feelings are measured by Displeasure
Index. At the beginning, the Displeasure Index for each person is 0. When waiting for the food, the ithperson will gain Bi Displeasure Index per minute.
If one's Displeasure Index goes too high, he will not buy your food any more. So you need to keep the sum of all people's Displeasure Indexas
low as possible in order to maximize your income. Your task is to find the minimal sum of Displeasure Index.
Input
The input contains multiple test cases, separated with a blank line. Each case is started with three integers N ( 1 <= N <= 1000 ), V ( V > 0),X ( X >=
0 ), then N lines followed. Each line contains two integers Xi ( Xi >= 0 ), Bi ( Bi >= 0), which are described above.
You can safely assume that all numbers in the input and output will be less than 231 - 1.
Please process to the end-of-file.
Output
For each test case please output a single number, which is the minimal sum of Displeasure Index. One test case per line.
Sample Input
5 1 0
1 1
2 2
3 3
4 4
5 5
Sample Output
55
区间DP
dp[i][j][k] 表示i到j这个区间送完了,快递小哥在哪个端点。
关于区间DP,可以参照这个博客
http://blog.csdn.net/dacc123/article/details/50885903
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stdio.h> using namespace std;
#define MAX 100000000
int n,v,x;
struct Node
{
int xi;
int bi;
}a[1005];
int dp[1005][1005][2];
int cmp(Node a,Node b)
{
return a.xi<b.xi;
}
int sum[1005];
int main()
{
while(scanf("%d%d%d",&n,&v,&x)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].xi,&a[i].bi);
}
a[n+1].xi=x;a[n+1].bi=0;
sort(a+1,a+n+2,cmp);
int pos=0;
sum[0]=0;
for(int i=1;i<=n+1;i++)
sum[i]=sum[i-1]+a[i].bi;
for(int j=1;j<=n+1;j++)
if(a[j].xi==x)
pos=j;
for(int i=0;i<=n+1;i++)
for(int j=0;j<=n+1;j++)
dp[i][j][0]=MAX,dp[i][j][1]=MAX;
dp[pos][pos][0]=0;
dp[pos][pos][1]=0;
for(int i=pos;i>=1;i--)
{
for(int j=pos;j<=n+1;j++)
{
if(i==j)
continue;
int num=sum[i-1]-sum[0]+sum[n+1]-sum[j];
dp[i][j][1]=min(dp[i][j][1],dp[i][j-1][1]+(a[j].xi-a[j-1].xi)*(a[j].bi+num));
dp[i][j][1]=min(dp[i][j][1],dp[i][j-1][0]+(a[j].xi-a[i].xi)*(a[j].bi+num));
dp[i][j][0]=min(dp[i][j][0],dp[i+1][j][0]+(a[i+1].xi-a[i].xi)*(a[i].bi+num));
dp[i][j][0]=min(dp[i][j][0],dp[i+1][j][1]+(a[j].xi-a[i].xi)*(a[i].bi+num));
}
}
printf("%d\n",min(dp[1][n+1][0],dp[1][n+1][1])*v); }
return 0;
}
ZOJ 3469Food Delivery(区间DP)的更多相关文章
- ZOJ 3469 Food Delivery 区间DP
这道题我不会,看了网上的题解才会的,涨了姿势,现阶段还是感觉区间DP比较难,主要是太弱...QAQ 思路中其实有贪心的意思,n个住户加一个商店,分布在一维直线上,应该是从商店开始,先向两边距离近的送, ...
- ZOJ3469 Food Delivery —— 区间DP
题目链接:https://vjudge.net/problem/ZOJ-3469 Food Delivery Time Limit: 2 Seconds Memory Limit: 6553 ...
- ZOJ3469 Food Delivery 区间DP
题意:有一家快餐店送外卖,现在同时有n个家庭打进电话订购,送货员得以V-1的速度一家一家的运送,但是每一个家庭都有一个不开心的值,每分钟都会增加一倍,值达到一定程度,该家庭将不会再订购外卖了,现在为了 ...
- 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个客人,每个客人每分钟增加的愤怒值不同. ...
- Food Delivery ZOJ - 3469(区间dp)
题目传送门 题目翻译:当我们专注于解决问题时,我们通常宁愿呆在电脑前而不是外出吃午饭.在这个时候,我们可能会要求提供食物. 假设有N个人生活在一条直线的街道上,它只是位于X坐标轴上.第i个人的坐标是X ...
- zoj 3537 Cake 区间DP (好题)
题意:切一个凸边行,如果不是凸包直接输出.然后输出最小代价的切割费用,把凸包都切割成三角形. 先判断是否是凸包,然后用三角形优化. dp[i][j]=min(dp[i][j],dp[i][k]+dp[ ...
- zoj 3537 Cake(区间dp)
这道题目是经典的凸包的最优三角剖分,不过这个题目给的可能不是凸包,所以要提前判定一下是否为凸包,如果是凸包的话才能继续剖分,dp[i][j]表示已经排好序的凸包上的点i->j上被分割成一个个小三 ...
随机推荐
- 好的API设计
[非原创,原文链接] API设计书籍下载: 1.keynote.pdf 2.api-design.pdf 最近在重构公司的一个交互中间件,在重新设计API及总体架构的时候思考了许多, 不禁萌发了一个疑 ...
- 简单html弹窗
css: <style type="text/css"> .moneyrecord { display:none; border:0.5em solid #00AAEE ...
- C++ string char[] 转化
可见到string转char[]相当简单,只要呼叫string class的成员函式c_str(),即可将string转为char[].那么char[]转string呢?有两种方法,第一种是初始str ...
- 【Mongo】数据备份与还原
http://blog.51yip.com/nosql/1573.html mongorestore -d 数据库名 -c 集合名 --drop **.bson
- bootstrap中如何使input中的小图标获得点击事件
bootstrap中,放入input中的小图标是不能点击的. 在表单中经常遇见密码旁边的眼睛图标点击后,可使密码可见. 要使小图标获得点击事件,可在小图标上覆盖一个跟小图标一样大的透明层,然后给透明层 ...
- C++学习地址
1.http://blog.csdn.net/netanimals 2.http://blog.csdn.net/g710710/article/category/886003 3.http://bl ...
- eclipse (ADT) svn插件 过滤上传的 文件 文件夹 一劳永逸
其实很简单哈,过滤的有三种类型,1.文件.2.文件夹.3.android的target 在ADT中 window->preferences-> 会打开如下界面 ignore就是忽视的意思 ...
- MathType中输入破折号的教程
MathType公式编辑器中的包含的各种数学符号与模板已经足够我们在编辑公式时使用了,但是除此之外,MathType还有一些符号并不是数学专有的符号,但是在数学中也偶尔会用到,比如破折号.MathTy ...
- Spring------Spring boot data jpa的使用方法
1.DoMain.java import org.springframework.boot.SpringApplication; import org.springframework.boot.aut ...
- SaltStack 如何自定义 grains 信息
首先在 minion 上编辑 grains 配置文件,然后添加自定义的 grains: [root@localhost ~]$ cat /etc/salt/grains # 这个文件默认是没有的 ro ...