[hdu6580]Milk
考虑定义以下dp数组:
1.g1[i][j]表示第i行从中间出发向左取j瓶牛奶最少要多久
2.g2[i][j]表示第i行从中间出发向右取j瓶牛奶最少要多久
3.g3[i][j]表示在g1[i][j]的基础上回到中间最少要多久
4.g4[i][j]表示在g2[i][j]的基础上回到中间最少要多久
5.f1[i][j]表示第i行从中间出发取到j瓶牛奶最少要多久
6.f2[i][j]表示在f1[i][j]的基础上回到中间最少要多久
7.f3[i][j]表示从(1,1)出发前i行取到j个物品最少要多久
8.f4[i][j]表示在f3[i][j]的基础上回到中间最少要多久(不算向下操作)
可以用dp算出以上八个数组(可以一起算就不用开vector),然后就可以用f3算出ans,时间复杂度$o(k^{2})$

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 10005
4 #define inf 1000000LL*0x3f3f3f3f
5 #define ll long long
6 struct ji{
7 int id,x,y,z;
8 bool operator < (const ji &k)const{
9 return (x<k.x)||(x==k.x)&&(y<k.y);
10 }
11 }a[N];
12 set<int>s;
13 int T,n,m;
14 ll sum,g1[N],g2[N],g3[N],g4[N],f1[N],f2[N],f3[N],f4[N];
15 void calc(ll *x,ll *y,int l,int r,int t,int p){
16 for(int j=1,k;j!=(r-l)*p+1;j++){
17 s.clear();
18 sum=0;
19 for(k=l;abs(k-l)<j;k+=p){
20 s.insert(a[k].z);
21 sum+=a[k].z;
22 }
23 x[j]=min(x[j],sum+p*(a[k-p].y-t));
24 y[j]=min(y[j],sum+p*(a[k-p].y-t)+abs(a[k-p].y-n));
25 for(;k!=r;k+=p){
26 int ma=*(--s.end());
27 if (ma>a[k].z){
28 sum-=ma-a[k].z;
29 s.erase(--s.end());
30 s.insert(a[k].z);
31 }
32 x[j]=min(x[j],sum+p*(a[k].y-t));
33 y[j]=min(y[j],sum+p*(a[k].y-t)+abs(a[k].y-n));
34 }
35 }
36 }
37 int main(){
38 scanf("%d",&T);
39 while (T--){
40 scanf("%*d%d%d",&n,&m);
41 n=(n+1)/2;
42 for(int i=1;i<=m;i++)scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
43 sort(a+1,a+m+1);
44 for(int i=1;i<=m;i++)f3[i]=f4[i]=inf;
45 f3[0]=f4[0]=n-1;
46 for(int i=1,j;i<=m;){
47 for(j=i;(j<m)&&(a[j].x==a[j+1].x);j++);
48 int l=i,r=j,mid;
49 for(mid=l;(mid<=r)&&(a[mid].y<n);mid++);
50 for(j=1;j<=r-l+1;j++)g1[j]=g2[j]=g3[j]=g4[j]=inf;
51 calc(g1,g3,mid-1,l-1,n,-1);
52 calc(g2,g4,mid,r+1,n,1);
53 for(j=1;j<=r-l+1;j++)f1[j]=min(g1[j],g2[j]);
54 for(j=1;j<=r-l+1;j++)f2[j]=min(g3[j],g4[j]);
55 for(i=1;i<=mid-l;i++)
56 for(j=1;j<=r-mid+1;j++){
57 f1[i+j]=min(f1[i+j],min(g1[i]+g4[j],g3[i]+g2[j]));
58 f2[i+j]=min(f2[i+j],g3[i]+g4[j]);
59 }
60 if (a[l].x==1){
61 calc(f3,f4,1,r-l+2,1,1);
62 i=r+1;
63 continue;
64 }
65 for(i=l-1;i>=0;i--)
66 for(j=1;j<=r-l+1;j++){
67 f3[i+j]=min(f3[i+j],f4[i]+a[l].x-1+f1[j]);
68 f4[i+j]=min(f4[i+j],f4[i]+f2[j]);
69 }
70 i=r+1;
71 }
72 for(int i=1;i<m;i++)printf("%lld ",f3[i]);
73 printf("%lld\n",f3[m]);
74 }
75 }
[hdu6580]Milk的更多相关文章
- hdu多校第一场1003 (hdu6580)Milk 背包
题意: 有一个n*m的矩阵,左右可以随便走,但只能在每一行的中点往下走,每走一格花费时间1. 现在这个矩阵里放了k瓶牛奶,第i个牛奶喝下去需要ti时间 起点是(1,1) 对于每个i∈[1,k],问喝掉 ...
- BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 [后缀数组]
1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1017 Solved: ...
- POJ 3261 Milk Patterns 后缀数组求 一个串种 最长可重复子串重复至少k次
Milk Patterns Description Farmer John has noticed that the quality of milk given by his cows varie ...
- 【BZOJ-1717】Milk Patterns产奶的模式 后缀数组
1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 881 Solved: ...
- 后缀数组---Milk Patterns
POJ 3261 Description Farmer John has noticed that the quality of milk given by his cows varies from ...
- Milk
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) ...
- POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)+后缀数组模板
Milk Patterns Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 7586 Accepted: 3448 Cas ...
- 洛谷P1215 [USACO1.4]母亲的牛奶 Mother's Milk
P1215 [USACO1.4]母亲的牛奶 Mother's Milk 217通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 ...
- 【BZOJ】【1717】【USACO 2006 Dec】Milk Patterns产奶的模式
后缀数组 o(︶︿︶)o 唉傻逼了一下,忘了把后缀数组的字典范围改回20001,直接21交了上去,白白RE了两发……sigh 既然要找出现了K次的子串嘛,那当然要用后缀数组了>_>(因为我 ...
随机推荐
- 每日总结:Number&Math类(2021.10.4)
Java语言为每一个内置数据类型提供了对应的包装类. 所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类Number的子类 其中Integer 对应的基 ...
- bzoj1407,洛谷2421 NOI2002荒岛野人
题目大意: 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,-,M.岛上住着N个野人,一开始依次住在山洞C1,C2,-,CN中,以后每年,第i个野人会沿顺时针向前走P ...
- bzoj4821 && luogu3707 SDOI2017相关分析(线段树,数学)
题目大意 给定n个元素的数列,每一个元素有x和y两种元素,现在有三种操作: \(1\ L\ R\) 设\(xx\)为\([l,r]\)的元素的\(x_i\)的平均值,\(yy\)同理 求 \(\fra ...
- Vuls 漏洞扫描工具部署及效果展示
Vuls 漏洞扫描工具部署及效果展示 介绍 Vuls根据NVD,OVAL等数据对主流Linux系统进行扫描,并具有完善的报告. 支持系统 Distribution Release Alpine 3.3 ...
- SpringMVC 数据响应
页面跳转 返回字符串形式 直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转. @RequestMapping("/quick") public String ...
- Linux常用命令查看文件、别名、切换目录、创建目录、查看当前目录
一.创建条件(使用liunx常用命令): 1.查看阿里云的环境是否搭建完成 首先快捷键 win+R 输入cmd 回车,打开命令提示符输入命令 ssh,回车. 2.登录阿里云账户 输入命令格式:ssh ...
- python进阶(21)typing模块--类型提示支持
typing介绍 Python是一门弱类型的语言,很多时候我们可能不清楚函数参数的类型或者返回值的类型,这样会导致我们在写完代码一段时间后回过头再看代码,忘记了自己写的函数需要传什么类型的参数,返 ...
- MySQL:怒刷牛客网“sql实战”
MySQL:怒刷牛客网"sql实战" 在对MySQL有一定了解后,抽空刷了一下 牛客网上的 数据库SQL 实战,在此做一点小小的记录 SQL1 查找最晚入职员工的所有信息 sele ...
- Scrum Meeting 15
第15次例会报告 日期:2021年06月09日 会议主要内容概述: 开发工作接近尾声,接下来两天重点放在单元测试.调CSS和增加数据集数量上. 一.进度情况 我们采用日报的形式记录每个人的具体进度,链 ...
- 同人逼死官方系列!基于sddc 协议的SDK框架 sddc_sdk_lib 解析
基于sddc 协议的SDK框架 sddc_sdk_lib 解析 之前在移植 libsddc 库的时候感觉官方 demo 太低效了( ̄. ̄),复制粘贴代码好累,而且写出一个BUG,其他复制的代码整个就裂 ...