首页 > 其他分享 >洛谷 P1772 [ZJOI2006] 物流运输 做题记录

洛谷 P1772 [ZJOI2006] 物流运输 做题记录

时间:2024-11-12 18:19:12浏览次数:1  
标签:洛谷 val int read P1772 ZJOI2006 dis dp define

很神经的一道题。

令 \(val_{i,j}\) 表示从第 \(i\) 天到第 \(j\) 天每天都走一条道路,单次的最小花费。可以枚举 \(\{i,j\}\) 然后把在这个区间里的所有点设置成不可达,每一个 \(\{i,j\}\) 都可以用 floyd 算,时间复杂度 \(O(n^2m^3)\)。
令 \(f_i\) 表示第 \(i\) 天的最小花费,那么我们有 \(f_i=\min_{j=1}^{i-1}(f_j+val_{j+1,i}\times (j-i)+k)\)。

点击查看代码
#include<bits/stdc++.h>
#define int ll
#define mem(a,b) memset((a),(b),sizeof(a))
#define m0(a) memset((a),0,sizeof(a))
#define lb(x) ((x)&-(x))
#define lc(x) ((x)<<1)
#define rc(x) (((x)<<1)|1)
#define pb(G,x) (G).push_back((x))
#define For(a,b,c) for(int a=(b);a<=(c);a++)
#define Rep(a,b,c) for(int a=(b);a>=(c);a--)
#define in1(a) a=read()
#define in2(a,b) a=read(), b=read()
#define in3(a,b,c) a=read(), b=read(), c=read()
#define inn(i,n,a) For(i,1,n) a[i]=read();

#define ll long long
#define i128 __int128

using namespace std;
inline int read() {
	int xx= 0;int f= 1;
	char c = getchar();
	while(c<'0'||c>'9') { 
		if(c=='-') f= -1;
		c= getchar();
	}
	while(c>='0'&&c<='9') {
		xx= (xx<<1)+(xx<<3)+(c^48);
		c= getchar();
	}
	return xx*f;
}
#define maxn 200050
int G[22][22];
int val[110][110];
int n,m,k,e;
vector<int> g[110];
int dis[22][22];
bool vis[22];
ll dp[110];
void pre_dis(int l,int r) {
	m0(vis);
	For(i,1,m) For(j,1,m) dis[i][j]=G[i][j];
	For(i,1,m) dis[i][i]=0;
	For(i,l,r) {
		for(auto u:g[i])
			vis[u]=1;
	}
	For(i,1,m) {
		if(vis[i]) {
			For(j,1,m) dis[i][j]=1e9,dis[j][i]=1e9;
		}
	}
	For(k,1,m) For(i,1,m) For(j,1,m) dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
	val[l][r]=dis[1][m];
}
signed main() {
	in2(n,m); in2(k,e);
	mem(G,0x3f);
	For(i,1,e) {
		int u,v,d;
		in3(u,v,d);
		G[u][v]=G[v][u]=min(G[u][v],d);
	}
	int _=read();
	while(_--) {
		int p,a,b;
		in3(p,a,b);
		For(i,a,b) g[i].push_back(p);
	}
	For(i,1,n) For(j,i,n) 
		pre_dis(i,j);
	For(i,1,n) {
		dp[i]=val[1][i]*i;
		For(j,1,i-1)
			dp[i]=min(dp[i],dp[j]+val[j+1][i]*(i-j)+k);
	}
	cout<<dp[n];
}

标签:洛谷,val,int,read,P1772,ZJOI2006,dis,dp,define
From: https://www.cnblogs.com/CodingGoat/p/18542424

相关文章

  • 洛谷解题日记||基础篇4
     #include<iostream>usingnamespacestd;intmain(){intn,m;cin>>n>>m;//计算所有矩形的数量longlongtotalRectangles=(longlong)(n*(n+1)/2)*(longlong)(m*(m+1)/2);//计算正方形的数量longlongt......
  • 【题解】洛谷P8346:最澄澈的空与海
    【题解】洛谷P8346:最澄澈的空与海猜结论题,本身其实很简单,在纸上画个差不多就能想出来,我一开始想二分图最大匹配,但是还是太大了,不可以。当一个二分图有且仅有一种解时,必定有节点的入度为\(1\)。我们想到有多种匹配的情况,可以想到如果这是一个环的情况,一个左边的点将他右边的点......
  • 题解:洛谷 P5180 【模板】支配树
    在图论模拟赛被T4的有向图必经点硬控了\(10^9+7s\),写篇题解纪念一下。其实,求有向图的必经点,通法就是支配树。一些定义:支配点:在确定起点\(S\)的情况下,对于一个点\(k\),若存在\(x\),使得删除\(x\)以及与\(x\)连接的边后,\(x\)与\(k\),不再强连通,那么就称\(k\)为\(x......
  • 【题解】洛谷P3118: Moovie Mooving G
    洛谷P3118:MoovieMoovingG看到数据范围考虑状压,题目要求看的电影最少那就维护时间最大,我们设\(f_{i}\)为\(i\)状态最多可以看多久的电影,对于不在集合的点我们枚举转移。我们每个开始时间都对应一个截至时间,问能加入这个点,每个点花费时间是固定的,我们又要不间断所以我们找......
  • 洛谷P5744
    P5744【深基7.习9】培训-洛谷|计算机科学教育新生态【深基7.习9】培训题目描述某培训机构的学员有如下信息:-姓名(字符串)-年龄(周岁,整数)-去年NOIP成绩(整数,且保证是5 的倍数)经过为期一年的培训,所有同学的成绩都有所提高,提升了20%(当然NOIP满分是600 分,不能......
  • 洛谷P1618
    P1618三连击(升级版)-洛谷|计算机科学教育新生态三连击(升级版)题目描述将1,2,...9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出`No!!!`。//感谢黄小U饮品完善题意输入格式三个数,A,B,C。输出格式......
  • CSP-J2024 复赛T1(洛谷P11227)题解
    前传作者初赛没过。坐标sd,79分过不了已经适应了。话说这次泄题事件闹得沸沸扬扬,都说各省分数线要降,最后sd降了8分,80。挺逆天的,感觉sd再这样下去一点OIer都要没了。思路桶排思想,用二维数组模拟一整副牌,本来做的时候是怕有重复牌才这样做,事实上不会。ACCode#include<bits/......
  • 洛谷题单103数组题解||by红糖
    P1428小鱼比可爱题目描述人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样......
  • 洛谷题单指南-二叉堆与树状数组-P2085 最小函数值
    原题链接:https://www.luogu.com.cn/problem/P2085题意解读:有n个函数,函数中x取值>=1,计算所有函数能得到的值中最小的m个。解题思路:函数中x取值是>=1的整数,因此每个函数的值是f(1),f(2),f(3)....,是一个递增序列,题目本质上是要从n个递增序列中找到前m个最小的数。首先,对所有函数......
  • 【模板】可持久化线段树 2(洛谷P3834)
    #include<bits/stdc++.h>#defineendl'\n'usingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();constexprintN=2e5+7;intn,m,a[N],b[N];introot[N],tot;//根节点所有节点个数intls[N*40],rs[N*40],sum......