[JSOI] 快递服务 [SHOI] 书柜的尺寸 优化dp
[JSOI2010]快递服务
朴素思想 : f(i,a,b,c)f(i,a,b,c)f(i,a,b,c) 表示前 iii 个订单,三个快递员分别在 a,b,ca,b,ca,b,c
那么可得:
- 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]])
- 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]])
- 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]
- 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])
- 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])
- 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相关推荐
- [BZOJ1933][Shoi2007]Bookcase 书柜的尺寸(DP)
看到层数只有33,可以推断DP模型的维数一定和33有关. 一个模型:f[i][j][k]f[i][j][k]表示到了第ii本书,第11行的厚度之和为jj,第22行的厚度之和为kk时的最小总高度. 但这 ...
- 国家邮政局发布2021年快递服务满意度和时限准时率测结果
21日,国家邮政局举行2022年第一季度例行新闻发布会,通报2021年快递服务满意度调查和时限准时率测试结果. 国家邮政局市场监管司副司长边作栋表示,2021年快递服务全程时限水平比2020年有较大提 ...
- bzoj千题计划201:bzoj1820: [JSOI2010]Express Service 快递服务
http://www.lydsy.com/JudgeOnline/problem.php?id=1820 很容易想到dp[i][a][b][c] 到第i个收件地点,三个司机分别在a,b,c 收件地点的 ...
- Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战
Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...
- 企业网站 源码 e-mail_天津seo优化套餐服务收费_天津网站优化关键词价格
天津华阳在线专注于SEO关键词排名优化,品牌网站建设,营销型网站建设,App.小程序开发,搜索引擎seo优化,竞价托管sem,品牌口碑建设与代运营等服务.企业通过引进前BAT产品经理不断丰富产品线优化 ...
- 申通快递:1月快递服务业务收入25.65亿元 同比增长21.27%
2月19日消息,申通快递发布2022年1月经营简报,数据显示,1月快递服务业务收入25.65亿元,同比增长21.27%:完成业务量9.89亿票,同比增长17.30%:快递服务单票收入2.59元,同比增 ...
- 抖音测试快递服务“音尊达” 已接入中通、圆通等,可送货上门
1月12日消息,据Tech星球消息,抖音电商近期测试了快递服务"音尊达",其商家权益包括包括:送货上门,末端优先派送,末端投诉获赔,包裹优先转运,客户专属服务等. 目前,音尊达已经 ...
- 国家邮政局:9月份全国快递服务企业业务收入完成921.4亿元,同比增长11.8%
10月16日消息,国家邮政局公布2021年9月邮政行业运行情况, 1-9月,邮政行业业务收入(不包括邮政储蓄银行直接营业收入)累计完成9279.3亿元,同比增长18.7%:业务总量累计完成9815.4 ...
- 7月用户对快递服务问题申诉24978件 同比增长50.1%
8月28日消息,据国家邮政局发布的数据显示,2021年7月,国家邮政局和各省(区.市)邮政管理局通过"12305"邮政业用户申诉电话和申诉网站共处理申诉25569件,环比增长31. ...
最新文章
- servlet的 session什么时候用_抖音什么时候用dou+
- iOS UIVisualEffectView毛玻璃亮度不符合要求
- 百度申请“员工工作状态预测”专利,意欲何为?
- 1.4 正则化-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
- 老BOJ 13 K-based Numbers
- StarUML 逆向工程插件加载失败问题解决
- ie8 html 编辑器 为word,ie8生成word
- 微信支付开发(7) 刷卡支付
- H264/AVC协议基本概况
- {电脑救助站}常用知识2
- python语音识别终极指南_Python语音识别终极指南
- 红蜘蛛10013端口被占用
- Oracle11.2.0.3 ORA-3136 连接超时错误解决
- 《C语言及程序设计》实践参考——n=a!+b!+c!
- 【小工具】- Ubuntu如何查看cpu支持的指令集
- 摄像头Optical Center检测算法简单实现
- python 创建和使用字典
- 《草书识别》隐私政策
- 计算机控制adda转换实验报告,ADDA实验报告
- Win8安装程序出现2502、2503错误解决方法