首页 > 其他分享 >ABC-325

ABC-325

时间:2024-04-21 16:12:35浏览次数:24  
标签:dis1 ABC 题目 int ll abc325 325 dp

D

题目链接
https://atcoder.jp/contests/abc325/tasks/abc325_d
题目大意
image
题目思路
贪心,每一次优先选取最先出去的,优先队列!
题目代码

#include<bits/stdc++.h> 
#define ll long long
using namespace std;
int n,ans;
int main()
{
	cin >> n;
	vector<array<ll,2>>a(n);
	for(auto& x:a) cin >> x[0] >> x[1];
	vector<int>id(n);
	iota(id.begin(),id.end(),0);
	sort(id.begin(),id.end(),[&](int x,int y){
		if(a[x][0] != a[y][0]) return a[x][0] < a[y][0];
		else                   return a[x][1] < a[y][1];
	});
	priority_queue<ll,vector<int>,greater<int>> q;
	ll time = 0;
	auto it = id.begin();
	while(!q.empty() || it != id.end())
	{
		if(q.empty()) time = a[*it][0];
		while(it != id.end() && a[*it][0] <= time){
			q.push(a[*it][0] + a[*it][1]);
			it = next(it);
		}
		while(!q.empty() && q.top() < time) q.pop();
		if(!q.empty() && q.top() >= time){
			++ans;++time;q.pop();
		}
	}
	cout << ans << '\n';
	return 0;
}

E

题目链接
https://atcoder.jp/contests/abc325/tasks/abc325_e
题目大意
image
题目思路
两次Dijkstra,一次从1开始,使用car,另一次从n开始,使用train
题目代码

#include<bits/stdc++.h>
#define ll long long
#define pi pair<ll,int>
const int inf = 1e18;
const int N = 1e3 + 5;
using namespace std;
int n,A,B,C,cost1,cost2;
int g[N][N];
ll dis1[N],dis2[N];
ll ans = inf;
void dijkstra1(int start){
	dis1[start] = 0;
	priority_queue<pi,vector<pi>,greater<pi>>q;
	q.push({0,start});
	while(!q.empty()){
		int d = q.top().first,u = q.top().second;q.pop();
		if(d > dis1[u]) continue;
		for(int v = 1;v <= n;++v){
			if(v == u) continue;
			if(dis1[v] > dis1[u] + g[u][v] * A){
				dis1[v] = dis1[u] + g[u][v] * A;
				q.push({dis1[v],v});
			}
		}
	}
}
void dijkstra2(int start){
	dis2[start] = 0;
	priority_queue<pi,vector<pi>,greater<pi>>q;
	q.push({0,start});
	while(!q.empty()){
		int d = q.top().first,u = q.top().second;q.pop();
		if(d > dis2[u]) continue;
		for(int v = 1;v <= n;++v){
			if(v == u) continue;
			if(dis2[v] > dis2[u] + g[u][v] * B + C){
				dis2[v] = dis2[u] + g[u][v] * B + C;
				q.push({dis2[v],v});
			}
		}
	}
}
int main()
{
	cin >> n >> A >> B >> C;
	for(int i = 1;i <= n;++i){
		for(int j = 1;j <= n;++j)
			cin >> g[i][j];
	}
	for(int i = 1;i <= n;++i) dis1[i] = dis2[i] = inf;
	dijkstra1(1);dijkstra2(n);
	for(int i = 1;i <= n;++i){
		ans = min(ans,dis1[i] + dis2[i]);
	}
	cout << ans << '\n';
	return 0;
}

F

题目链接
https://atcoder.jp/contests/abc325/tasks/abc325_f
题目大意
image
题目思路
dp[i][j]表示从前i个物品中,执行操作1 j 次,执行了操作2 的最小操作次数!
题目代码

#include<bits/stdc++.h>
#define ll long long
const ll inf = 1e18;
const int N = 1e2 + 5;
using namespace std;
int n;
int D[N];
int L1,C1,K1,L2,C2,K2;
ll ans = inf;
int main()
{
	cin >> n;
	for(int i = 1;i <= n;++i) cin >> D[i];
	cin >> L1 >> C1 >> K1;
	cin >> L2 >> C2 >> K2;
	// dp[i][j]表示从前i个物品中,执行操作1 j 次,执行了操作2 的最小操作次数! 
	vector<vector<ll>>dp(n + 1,vector<ll>(K1 + 1,inf));
	for(int i = 0;i <= K1;++i) dp[0][i] = 0;
	for(int i = 1;i <= n;++i){
		for(int j = 0;j <= K1;++j){
			for(int k = 0;k <= j;++k){
				//                            上取整! 
				int v = max(0,(D[i] - k * L1 + L2 - 1) / L2);
				dp[i][j] = min(dp[i][j],dp[i - 1][j - k] + v);
			}
		}
	}
	for(int k1 = 0;k1 <= K1;++k1){
		if(dp[n][k1] <= K2){
			ans = min(ans,1ll * k1 * C1 + dp[n][k1] * C2);
		}	
	} 
	if(ans == inf) ans = -1;
	cout << ans << '\n';
	return 0;
}

G

题目链接
https://atcoder.jp/contests/abc325/tasks/abc325_g
题目大意
image
题目思路
dp[i][j] 表示 s[i..j] 经过操作后的最小长度!
题目代码

#include<bits/stdc++.h>
using namespace std;
string s;
int k;
int main()
{
	cin >> s >> k;
	// dp[i][j] 表示 s[i..j] 经过操作后的最小长度! 
	vector<vector<int>>dp(s.size() + 1,vector<int>(s.size() + 1,0));
	for(int r = 0;r < s.size();++r){
		for(int l = r;l >= 0;--l){
			dp[l][r] = r - l + 1;
			for(int m = l;m < r;++m)
				dp[l][r] = min(dp[l][r],dp[l][m] + dp[m + 1][r]);
			if(s[l] == 'o'){
				for(int m = l + 1;m <= r;++m)
					if(s[m] == 'f' && dp[l + 1][m - 1] == 0)
						dp[l][r] = min(dp[l][r],max(0,dp[m + 1][r] - k));
			}
		}
	}
	cout << dp[0][s.size() - 1] << '\n';
	return 0;	
} 

标签:dis1,ABC,题目,int,ll,abc325,325,dp
From: https://www.cnblogs.com/gebeng/p/18149075

相关文章

  • ABC 287 B - Postal Card
    题目链接:由于是可以和\(T\)的多个字符串相同而仅计数一次,考虑把\(T\)中的字符串用\(\rmset\)存储已达到去重的目的。注:\(\rmset\)的\(\rmcount\)返回\(1\)表示找到了该元素,返回\(0\)则说明没找到。#include<bits/stdc++.h>usingi64=longlong;intmain......
  • ABC 287 C - Path Graph?
    题目链接:首先根据条件$-对于所有i=1,2,…,N−1,有一条边连接顶点v_i$和\(v_{i+1}\)可以得到,路径图必须有\(N-1\)条边。其次,Ifintegers\(i\)and\(j\)satisfies\(1\leqi,j\leqN\)and\(|i-j|\geq2\),thenthereisnoedgethatconnectsvertices\(......
  • [ABC350] 赛后总结
    [ABC350]赛后总结AK之。A模拟//Problem:A-PastABCs//Contest:AtCoder-AtCoderBeginnerContest350//Author:Moyou//Copyright(c)2024MoyouAllrightsreserved.//Date:2024-04-2020:00:23#include<algorithm>#include<cstring>#incl......
  • ABC 350F
    没有push_down调了15分钟,然后在赛后7分钟过的,中间看到E是期望题就去打舟了,哎,再也不摆了(期望能不能别再出现了)翻转?这我熟,fhq啊!然后大写变小写?简单,再lazytag搞一下就好了。时间复杂度\(O(n\logn)\),带一个大常数,但是绰绰有余。#include<bits/stdc++.h>#definefor1......
  • ABC350题解(E-G)
    E直接搜一下\(N\)的可能到达的值的个数,发现不多(大约\(10^4\)个),直接暴力dp(记忆化搜索)。转移式\(f_i=\max(X\log_{A}N,\dfrac{\sum\limits_{j=1}^6f_{i/j}}{6}+Y)\)。化简得到\(f_i=\max(X\log_{A}N,\dfrac{\left(\sum\limits_{j=2}^6f_{i/j}\right)+6Y}{5})\)。F文艺......
  • ABC 286 C - Rotate and Palindrome
    题目链接:注意到“您可以按任意顺序执行以下两种运算零次或多次”。因此,解决这个问题的一个重要观察点是,你可以假设\(A\)操作执行了几次,然后\(B\)操作执行了几次。你也可以假设\(A\)操作最多被执行\(N\)次(因为执行\(N\)次就会使它处于原始状态)有了这个观察结果,你就......
  • [题解]ABC209F Deforestation
    ABC209FDeforestation首先我们可以思考\(a_i\)和\(a_{i+1}\)先砍哪棵花费少。可以看出,当\(a[i]<a[i+1]\)时,先砍\(a[i+1]\),反之亦然。所以这个题转化成了:给定\(n-1\)个关系,分别表示\(n\)个值中相邻两个的大小关系,问满足这些关系的序列个数。与AtcoderEducationalDPContest......
  • ABC349F题解
    思想看到LCM想到质因数分解。首先,我们先把\(M\)质因数分解了,根号复杂度刚好1e8级别。然后我们发现一个很显然的性质:如果一个数不是\(M\)的因数那他肯定没用。所以此处我们就把不是因数地踢掉。我们惊奇地发现因为\(M\)的质因数分解最多\(13\)个不同的质数,然后我......
  • [ABC232G] Modulo Shortest Path (优化建图)
    链接:https://www.luogu.com.cn/problem/AT_abc232_g暴力的做法肯定不行,这道题要用到一个比较经典的拆点操作:把一个点拆成内点和外点。在接下来的分析中会慢慢介绍。由于题目每次连的边都是单向边,那要考虑的问题是:比如说现在要从1走到3,怎么走才能与暴力建边等价。先不考虑取模这......
  • 「杂题乱刷」AT_abc230_e
    链接(luogu)链接(at)典题。整除分块。点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*/#include<bits/stdc++.h>usingnamespacestd;#definemapunordered_map#defineforl(i,a,b)for(registerlong......