[JSOI2010]快递服务

朴素思想 : f(i,a,b,c)f(i,a,b,c)f(i,a,b,c) 表示前 iii 个订单,三个快递员分别在 a,b,ca,b,ca,b,c

那么可得:

  1. f(i+1,pos[i+1],b,c)=min(f[i][a][b][c]+w[a][pos[i+1]])f(i+1,pos[i+1],b,c) = min(f[i][a][b][c] + w[a][pos[i+1]])f(i+1,pos[i+1],b,c)=min(f[i][a][b][c]+w[a][pos[i+1]])
  2. f(i+1,a,pos[i+1],c)=min(f[i][a][b][c]+w[b][pos[i+1]])f(i+1,a,pos[i+1],c) = min(f[i][a][b][c] + w[b][pos[i+1]])f(i+1,a,pos[i+1],c)=min(f[i][a][b][c]+w[b][pos[i+1]])
  3. f(i+1,a,b,pos[i+1])=min(f[i][a][b][c]+w[c][pos[i+1]])f(i+1,a,b,pos[i+1]) = min(f[i][a][b][c] + w[c][pos[i+1]])f(i+1,a,b,pos[i+1])=min(f[i][a][b][c]+w[c][pos[i+1]])

超空间超时间

由于三个快递员之中肯定有一个快递员在上一个订单的位置,我们可以只记录两个不在订单位置的快递员

当前三个快递员:x,y,pos[i]x,y,pos[i]x,y,pos[i]

  1. f(i+1,x,y)=min(f[i][x][y]+w[pos[i]][pos[i+1]])f(i+1,x,y) = min(f[i][x][y] + w[pos[i]][pos[i+1]])f(i+1,x,y)=min(f[i][x][y]+w[pos[i]][pos[i+1]]) (pos[i]→pos[i+1]pos[i]\to pos[i+1]pos[i]→pos[i+1])
  2. f(i+1,x,pos[i])=min(f[i][x][y]+w[y][pos[i+1]])f(i+1,x,pos[i]) = min(f[i][x][y] + w[y][pos[i+1]])f(i+1,x,pos[i])=min(f[i][x][y]+w[y][pos[i+1]]) (y→pos[i+1]y\to pos[i+1]y→pos[i+1])
  3. f(i+1,y,pos[i])=min(f[i][x][y]+w[x][pos[i+1]])f(i+1,y,pos[i]) = min(f[i][x][y] + w[x][pos[i+1]])f(i+1,y,pos[i])=min(f[i][x][y]+w[x][pos[i+1]]) (x→pos[i+1]x\to pos[i+1]x→pos[i+1])

由于 iii 这一维有关,可用滚动数组优化,注意滚动完后重新初始化过期数据

#include <iostream>
#include <cstring>
using namespace std;
const int inf=1e9+7;
int n,m,w[205][205],p[1005],f[2][205][205];
int main()
{cin>>m;for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){cin>>w[i][j];}}while(cin>>p[++n]);n--;memset(f,0x3f,sizeof(f));f[0][2][3]=0; p[0]=1;for(int i=0;i<n;i++){for(int a=1;a<=m;a++){for(int b=1;b<=m;b++){if(a==b or a==p[i] or b==p[i]) continue;f[i+1&1][p[i]][b] = min(f[i+1&1][p[i]][b], f[i&1][a][b] + w[a][p[i+1]]);f[i+1&1][a][p[i]] = min(f[i+1&1][a][p[i]], f[i&1][a][b] + w[b][p[i+1]]);f[i+1&1][a][b] = min(f[i+1&1][a][b], f[i&1][a][b] + w[p[i]][p[i+1]]);}}memset(f[i&1],0x3f,sizeof(f[i&1]));}int ans = inf;for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){if(i==j || j==p[n] || i==p[n]) continue;ans=min(ans,f[n&1][i][j]);}}cout<<ans;return 0;
}

[SHOI2007]书柜的尺寸

  • 朴素思想:f(i,w1,w2,w3,h1,h2,h3)f(i,w_1,w_2,w_3,h_1,h_2,h_3)f(i,w1​,w2​,w3​,h1​,h2​,h3​) 分别表示前 iii 本书,第一层宽度为 w1w_1w1​,第二层宽度为 w2w_2w2​,第三层宽度为 w3w_3w3​,第一层最高高度为 h1h_1h1​,第二层最高高度为 h2h_2h2​,第三层最高高度为 h3h_3h3​ 的最小面积

  • 如果我们已知 w1,w2w_1,w_2w1​,w2​ ,那么剩下书的宽度之和即为 w3w_3w3​ ,可以省去这一维

  • 由于最高的书一定是最高的,我们不妨将它放在第三层,那么 h3h_3h3​ 也可以省去

  • 我们可以按照 hhh 从大到小排序(不妨设第一本放在第三层),那么第一本放进第一层 或 第二层的书就需要加上其高度,即判断 w1,w2w_1,w_2w1​,w2​ 是否为 0 就可以知道这一本书是不是这一层的第一本,因此 h1,h2h_1,h_2h1​,h2​ 可以合并成一维 h12h_{12}h12​

  • 最终优化为 f(i,w1,w2,h12)f(i,w_1,w_2,h_{12})f(i,w1​,w2​,h12​)

这样还是不够优秀,我们考虑令 f(i,w1,w2)f(i,w_1,w_2)f(i,w1​,w2​) 表示前两层的最小高度,那么就可以省去 h12h_{12}h12​

转移方程为:

     //按 h 排序后,第一本书在第三层f[1][0][0] = a[1].h;for(int i=2;i<=n;i++){for(int w1=0;w1<=sum[i];w1++){for(int w2=0;w2<=sum[i];w2++){f[i][w1][w2] = min(f[i][w1][w2],f[i-1][w1][w2]);if(w1==0)f[i][w1+a[i].w][w2] = min(f[i][w1+a[i].w][w2], f[i-1][w1][w2]+a[i].h);elsef[i][w1+a[i].w][w2] = min(f[i][w1+a[i].w][w2], f[i-1][w1][w2]);if(w2==0)f[i][w1][w2+a[i].w] = min(f[i][w1][w2+a[i].w], f[i-1][w1][w2]+a[i].h);elsef[i][w1][w2+a[i].w] = min(f[i][w1][w2+a[i].w], f[i-1][w1][w2]);}}

最终求答案:

    for(int w1=1;w1<sum[n];w1++){for(int w2=1;w2<sum[n];w2++){if(f[n][w1][w2]==inf) continue;ans=min(ans,max3(w1,w2,sum[n]-w1-w2)*f[n][w1][w2]);}}

我们将 iii 这一维滚动数组优化,记得滚动后的初始化

#include <iostream>
#include <algorithm>
#include <cstring>
#define int long long
#define max3(a,b,c) max(max(a,b),c)
using namespace std;
int n, inf, sum[75], f[2][2105][2105];
struct Node{int h,w;
}a[75];
bool cmp(Node x,Node y) {return x.h>y.h;}
signed main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i].h>>a[i].w;sum[i]=sum[i-1]+a[i].w;}sort(a+1,a+n+1,cmp);memset(f,0x3f,sizeof(f));inf = f[0][0][0];f[1][0][0] = a[1].h;for(int i=2;i<=n;i++){for(int w1=0;w1<=sum[i];w1++){for(int w2=0;w2<=sum[i];w2++){f[i&1][w1][w2] = min(f[i&1][w1][w2],f[i-1&1][w1][w2]);if(w1==0)f[i&1][w1+a[i].w][w2] = min(f[i&1][w1+a[i].w][w2], f[i-1&1][w1][w2]+a[i].h);elsef[i&1][w1+a[i].w][w2] = min(f[i&1][w1+a[i].w][w2], f[i-1&1][w1][w2]);if(w2==0)f[i&1][w1][w2+a[i].w] = min(f[i&1][w1][w2+a[i].w], f[i-1&1][w1][w2]+a[i].h);elsef[i&1][w1][w2+a[i].w] = min(f[i&1][w1][w2+a[i].w], f[i-1&1][w1][w2]);}}memset(f[i-1&1],0x3f,sizeof(f[i-1&1]));}int ans=1e18+5;for(int w1=1;w1<sum[n];w1++){for(int w2=1;w2<sum[n];w2++){if(f[n&1][w1][w2]==inf) continue;ans=min(ans,max3(w1,w2,sum[n]-w1-w2)*f[n&1][w1][w2]);}}cout<<ans;return 0;
}

[JSOI] 快递服务 [SHOI] 书柜的尺寸 优化dp相关推荐

  1. [BZOJ1933][Shoi2007]Bookcase 书柜的尺寸(DP)

    看到层数只有33,可以推断DP模型的维数一定和33有关. 一个模型:f[i][j][k]f[i][j][k]表示到了第ii本书,第11行的厚度之和为jj,第22行的厚度之和为kk时的最小总高度. 但这 ...

  2. 国家邮政局发布2021年快递服务满意度和时限准时率测结果

    21日,国家邮政局举行2022年第一季度例行新闻发布会,通报2021年快递服务满意度调查和时限准时率测试结果. 国家邮政局市场监管司副司长边作栋表示,2021年快递服务全程时限水平比2020年有较大提 ...

  3. bzoj千题计划201:bzoj1820: [JSOI2010]Express Service 快递服务

    http://www.lydsy.com/JudgeOnline/problem.php?id=1820 很容易想到dp[i][a][b][c] 到第i个收件地点,三个司机分别在a,b,c 收件地点的 ...

  4. Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战

    Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...

  5. 企业网站 源码 e-mail_天津seo优化套餐服务收费_天津网站优化关键词价格

    天津华阳在线专注于SEO关键词排名优化,品牌网站建设,营销型网站建设,App.小程序开发,搜索引擎seo优化,竞价托管sem,品牌口碑建设与代运营等服务.企业通过引进前BAT产品经理不断丰富产品线优化 ...

  6. 申通快递:1月快递服务业务收入25.65亿元 同比增长21.27%

    2月19日消息,申通快递发布2022年1月经营简报,数据显示,1月快递服务业务收入25.65亿元,同比增长21.27%:完成业务量9.89亿票,同比增长17.30%:快递服务单票收入2.59元,同比增 ...

  7. 抖音测试快递服务“音尊达” 已接入中通、圆通等,可送货上门

    1月12日消息,据Tech星球消息,抖音电商近期测试了快递服务"音尊达",其商家权益包括包括:送货上门,末端优先派送,末端投诉获赔,包裹优先转运,客户专属服务等. 目前,音尊达已经 ...

  8. 国家邮政局:9月份全国快递服务企业业务收入完成921.4亿元,同比增长11.8%

    10月16日消息,国家邮政局公布2021年9月邮政行业运行情况, 1-9月,邮政行业业务收入(不包括邮政储蓄银行直接营业收入)累计完成9279.3亿元,同比增长18.7%:业务总量累计完成9815.4 ...

  9. 7月用户对快递服务问题申诉24978件 同比增长50.1%

    8月28日消息,据国家邮政局发布的数据显示,2021年7月,国家邮政局和各省(区.市)邮政管理局通过"12305"邮政业用户申诉电话和申诉网站共处理申诉25569件,环比增长31. ...

最新文章

  1. servlet的 session什么时候用_抖音什么时候用dou+
  2. iOS UIVisualEffectView毛玻璃亮度不符合要求
  3. 百度申请“员工工作状态预测”专利,意欲何为?
  4. 1.4 正则化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. 老BOJ 13 K-based Numbers
  6. StarUML 逆向工程插件加载失败问题解决
  7. ie8 html 编辑器 为word,ie8生成word
  8. 微信支付开发(7) 刷卡支付
  9. H264/AVC协议基本概况
  10. {电脑救助站}常用知识2
  11. python语音识别终极指南_Python语音识别终极指南
  12. 红蜘蛛10013端口被占用
  13. Oracle11.2.0.3 ORA-3136 连接超时错误解决
  14. 《C语言及程序设计》实践参考——n=a!+b!+c!
  15. 【小工具】- Ubuntu如何查看cpu支持的指令集
  16. 摄像头Optical Center检测算法简单实现
  17. python 创建和使用字典
  18. 《草书识别》隐私政策
  19. 计算机控制adda转换实验报告,ADDA实验报告
  20. Win8安装程序出现2502、2503错误解决方法

热门文章

  1. 【Spring Cloud Alibaba】Gateway 服务网关
  2. java字节序、主机字节序和网络字节序扫盲贴
  3. 我的世界 1.12.2 Idea 开发包构建教程
  4. Python:线程同步,Barrier屏障
  5. 生成带有logo的二维码
  6. jstl标签c:choose,c:when,c:otherwise用法
  7. 深圳国际智能家居展览会
  8. Intel原厂固态SSD硬盘抢先评测
  9. 世界各国的12个王朝
  10. linux下的IDE--codelite