题意:有一家快餐店送外卖,现在同时有n个家庭打进电话订购,送货员得以V-1的速度一家一家的运送,但是每一个家庭都有一个不开心的值,每分钟都会增加一倍,值达到一定程度,该家庭将不会再订购外卖了,现在为了以后有更多的家庭订购,要将外卖送到的情况下使得所有用户的不开心值总和达到最小

思路:区间DP

dp[i][j][0] :表示i到j这段区间内的最小值且留在i点

dp[i][j][1]:表示i到j这段区间内的最小值且留在j点

那么转移方程就是

sum[i]表示1到i的累加和,在枚举i到j的时候(0,i)和(j,n)这两段区间都要加倍

dp[i][j][0]=min(dp[i][j][0],dp[i+1][j][0]+(sum[i]+sum[n]-sum[j])*(p[i+1].x-p[i].x));
dp[i][j][0]=min(dp[i][j][0],dp[i+1][j][1]+(sum[i]+sum[n]-sum[j])*(p[j].x-p[i].x));

dp[i][j][1]=min(dp[i][j][1],dp[i][j-1][0]+(sum[i-1]+sum[n]-sum[j-1])*(p[j].x-p[i].x));
dp[i][j][1]=min(dp[i][j][1],dp[i][j-1][1]+(sum[i-1]+sum[n]-sum[j-1])*(p[j].x-p[j-1].x));

 //#pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hdu 用c++交
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <queue>
#include <stack>
#include <cmath>
#include <set>
#include <algorithm>
#include <vector>
#include <map>
// #include<malloc.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define LL long long
const int inf = 0x3f3f3f3f;
const double eps = 1e-;
// const double pi = acos(-1);
const LL MOD = ;
const int N = ; // inline int r(){
// int x=0,f=1;char ch=getchar();
// while(ch>'9'||ch<'0'){if(ch=='-') f=-1;ch=getchar();}
// while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
// return x*f;
// }
struct node{
int x,y;
}p[N]; bool cmp(node a,node b){
return a.x<b.x;
} int dp[N][N][];
int sum[N]; int main(){
int n,v,x;
while(~scanf("%d%d%d",&n,&v,&x)){
for(int i=;i<=n;i++){
scanf("%d%d",&p[i].x,&p[i].y);
}
p[++n].x=x;
p[n].y=;
sort(p+,p++n,cmp); sum[]=;
for(int i=;i<=n;i++){
sum[i]=sum[i-]+p[i].y;
}
int tem;
for(int i=;i<=n;i++){
if(p[i].x==x){
tem=i;
break;
}
} for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
dp[i][j][]=dp[i][j][]=inf;
}
}
dp[tem][tem][]=dp[tem][tem][]=; for(int i=tem;i>=;i--){
for(int j=tem;j<=n;j++){
if(i==j) continue; dp[i][j][]=min(dp[i][j][],dp[i+][j][]+(sum[i]+sum[n]-sum[j])*(p[i+].x-p[i].x));
dp[i][j][]=min(dp[i][j][],dp[i+][j][]+(sum[i]+sum[n]-sum[j])*(p[j].x-p[i].x)); dp[i][j][]=min(dp[i][j][],dp[i][j-][]+(sum[i-]+sum[n]-sum[j-])*(p[j].x-p[i].x));
dp[i][j][]=min(dp[i][j][],dp[i][j-][]+(sum[i-]+sum[n]-sum[j-])*(p[j].x-p[j-].x));
}
}
printf("%d\n",v*min(dp[][n][],dp[][n][]));
}
return ;
}

ZOJ3469 Food Delivery 区间DP的更多相关文章

  1. ZOJ3469 Food Delivery —— 区间DP

    题目链接:https://vjudge.net/problem/ZOJ-3469 Food Delivery Time Limit: 2 Seconds      Memory Limit: 6553 ...

  2. ZOJ 3469Food Delivery(区间DP)

    Food Delivery Time Limit: 2 Seconds      Memory Limit: 65536 KB When we are focusing on solving prob ...

  3. ZOJ 3469 Food Delivery 区间DP

    这道题我不会,看了网上的题解才会的,涨了姿势,现阶段还是感觉区间DP比较难,主要是太弱...QAQ 思路中其实有贪心的意思,n个住户加一个商店,分布在一维直线上,应该是从商店开始,先向两边距离近的送, ...

  4. ZOJ - 3469 Food Delivery (区间dp)

    When we are focusing on solving problems, we usually prefer to stay in front of computers rather tha ...

  5. zoj 3469 Food Delivery 区间dp + 提前计算费用

    Time Limit: 2 Seconds      Memory Limit: 65536 KB When we are focusing on solving problems, we usual ...

  6. ZOJ 3469 Food Delivery(区间DP好题)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4255 题目大意:在x轴上有n个客人,每个客人每分钟增加的愤怒值不同. ...

  7. 区间DP小结

    也写了好几天的区间DP了,这里稍微总结一下(感觉还是不怎么会啊!). 但是多多少少也有了点感悟: 一.在有了一点思路之后,一定要先确定好dp数组的含义,不要模糊不清地就去写状态转移方程. 二.还么想好 ...

  8. ZOJ 3469 Food Delivery(区间DP)

    https://vjudge.net/problem/ZOJ-3469 题意:在一条直线上有一个餐厅和n个订餐的人,每个人都有随时间上升的不满意值,从餐厅出发,计算出送完时最小的不满意值总和. 思路: ...

  9. zoj3469 区间dp好题

    /* 按坐标排序 以餐厅为起点向两边扩展区间 dp[i][j][0]表示送完区间[i,j]的饭后停留在左边的代价 dp[i][j][1]表示送完区间[i,j]的饭后停留在右边的代价 */ #inclu ...

随机推荐

  1. HDFS 的可靠性

    HDFS 的可靠性主要有一下几点: 冗余副本策略 机架策略 心跳机制 安全模式 效验和 回收站 元数据保护 快照机制 1.冗余副本策略 可以在hdfs-site.xml中设置复制因子指定副本数量 所有 ...

  2. eclipse中切换jre后报错:Java compiler level does not match the version of the installed Java project facet.

    项目移除原来的jre环境lib后,添加本地的jre,报错如下: Java compiler level does not match the version of the installed Java ...

  3. static 内部类

    一般情况下是不可以用static修饰类的.如果一定要用static修饰类的话,通常static修饰的是匿名内部类. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static ...

  4. tomcat context 配置 项目部署

    将tomcat/conf/server.xml文件打开, 在</Host>标签之前添加: <Context path = "" docBase = "F ...

  5. 安卓从业者应该关注:Android 6.0的运行时权限

    Android 6.0,代号棉花糖,自发布伊始,其主要的特征运行时权限就很受关注.因为这一特征不仅改善了用户对于应用的使用体验,还使得应用开发者在实践开发中需要做出改变. 没有深入了解运行时权限的开发 ...

  6. Python高级特性

    比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: 这是正确的姿势

  7. CAS SiteMinder (单点登录)

    http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/

  8. Subversion安装和使用

    Subversion(SVN)是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说.SVN分为客户端和服务器端,一般服务器端安装在服务器上,我们开发者用的都是客户端.TortoiseSVN是 ...

  9. php/ java/asp.net

    php大型网站用得多 企业级开发 java/asp.net用得多 这个很好理解 php 执行效率好 可塑性强 接近底层 java asp.net 封装了更多的东西,开发企业级业务 效率更高, 但是高性 ...

  10. NFC(6)NFC编程的几个重要类,NFC硬件启动android应用原理

    用于NFC编程的几个重要类 Tag NFC 标签 NfcAdapter Nfc 的适配类 NdefMessage 描述NDEF格式的信息 NdefRecord 描述NDEF信息的一个信息段,类似tab ...