首页 > 其他分享 >ABC373 E/F

ABC373 E/F

时间:2024-10-03 20:12:02浏览次数:5  
标签:node int 复杂度 long hack ABC373

ABC373 E/F

E - How to Win the Election

二分答案比较好想,可是细节有点多,复杂度 $ O(n\log^2 n) $ 。一开始忘了一个特判,狂WA不止,然后调完再交,直接破防,WA一个点。接着尝试去卡,不知道怎么想的,粘错代码了。还剩半个小时,非常忙碌地调代码,但是不知道在忙什么。

赛后找到正确代码,调过hack( $ N = M $ 的情况 )。

代码不贴了,太丑。

F - Knapsack with Diminishing Values

正解做法

按照 $ w_i $ 分组,计算对于每个 $ w_i $ ,选择 $ j $ 个物品能达到的最大价值。具体来说,就是用堆维护该物品选择第 $ k $ 个产生的价值,贪心策略显然正确。然后就是普通的背包,复杂度最劣是一个调和级数, $ O(NW\log W) $ 。

暴力

#include<bits/stdc++.h>
const int N=1e5;
int w[N],v[N];
long long f[N];
int main(){
	int n,c;scanf("%d%d",&n,&c);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&w[i],&v[i]);
	}
	for(int i=1;i<=n;i++){
		bool con=1;
		for(int k=1;con;k++){
			con=0;
			for(int j=c-w[i];j>=0;j--){
				if(f[j]+v[i]-2*k+1>f[j+w[i]])
					con=1,f[j+w[i]]=f[j]+v[i]-2*k+1;
			}
		}
	}
	printf("%lld",f[c]);
}

xrlong 翻最短解的时候找的这个,逆天暴力哥,而且跑飞快,可以被hack。

优化

发现hack暴力的方法不难想,只要然他前面的决策不够优秀,后面就会跑很多次。而我们伟大的 wang54321 发明了两种优化。

第一,随机化,复杂度不知道是什么,不考虑。

第二,排序,按照 $ v_i $ 降序排列,也不知道什么复杂度,但是跑得很快。(欢迎hack)

#include<bits/stdc++.h>
using namespace std;
const int N=1e5;
int w[N],v[N];
long long f[N];
struct node{
	int x,y;
}e[N];
bool cmp(node a,node b){
	return a.y>b.y;
}
long long cnt;
int main(){
	int n,c;scanf("%d%d",&n,&c);
	for(int i=1;i<=n;i++){
		scanf("%d%d",&w[i],&v[i]);
		e[i].x=w[i];e[i].y=v[i];
	}
	sort(e+1,e+n+1,cmp);
	for(int i=1;i<=n;i++){
		bool con=1;
		for(int k=1;con;k++){
			con=0;
			for(int j=c-e[i].x;j>=0;j--){
				if(f[j]+e[i].y-2*k+1>f[j+e[i].x])
					con=1,f[j+e[i].x]=f[j]+e[i].y-2*k+1;
				cnt++;
			}
		}
	}
	cerr<<cnt<<endl;
	printf("%lld",f[c]);
}

标签:node,int,复杂度,long,hack,ABC373
From: https://www.cnblogs.com/abnormal123/p/18445947

相关文章

  • 题解:AT_abc373_d [ABC373D] Hidden Weights
    可以发现一个性质:对于图的每个连通分量,一旦在其中任何顶点上的值固定,则所有写入的值都是确定的。我们可以逐个DFS每个连通分量,按照题目的要求给每个点赋值,初始搜索的点值设成\(0\)即可。代码:#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,m;......
  • AT_abc373_e 的题解
    (一)二分套二分。(感觉是一个很麻烦的做法。)题目问的是让额外给的票最少,考虑二分答案。设二分的答案为\(x\),该候选人原来的得票为\(v\),想要超过他至少要\(x+v+1\)。同时用前缀和维护区间和。第一种情况为该候选人在前\(m\)个人中,如下图所示。绿色箭头为被讨论的人,蓝色箭......
  • ABC373 D-F 详解
    D思路说是有向图,实际上可以看作是无向图。因为如果有\(x_{v_j}-x_{u_j}=w_j\),那么就一定有\(x_{u_j}-x_{v_j}=-w_j\)。因为题目保证给出的数量关系没有冲突,所以如果我们知道了一个结点\(a\)的值,那么所有与它有数量关系的结点\(b\)的值都能被推出。从而如果一个连......
  • 题解:AtCoder Beginner Contest AT_abc373_d ABC373D Hidden Weights(格式美化版)
    题目传送门题目翻译给你一个NNN个点,MMM条边的有向图,其中边有边......
  • 题解:AtCoder Beginner Contest AT_abc373_d ABC373D Hidden Weights
    题目传送门题目翻译给你一个NNN个点,MMM条边的有向图,其中边有边......
  • 「比赛记录」AtCoder abc373 (9.28)
    CTH想看F题解,于是先发出来F.KnapsackwithDiminishingValues属于是翻译官方题解了首先我们设\(dp_{w,j}\)表示从权重为\(w\)或更小的物品中选总重为\(j\)的物品可以得到的最大幸福度。考虑\(dp\)的转移。我们把所有物品按照权重\(w\)分为多组,(每一组中所有物品......
  • ABC373F 题解
    容易发现这是一个完全背包问题,我们设状态\(f_{i,j}\)表示前\(i\)个物品使用了\(j\)个容量的最大价值。容易写出转移方程式:\(f_{i,j}=\max\limits_{k=0}^{\lfloor\frac{j}{w}\rfloor}f_{i-1,j-kw}+kv-k^2\)直接dp是\(O(n^3)\)。考虑对这个dp进行优化。上面的方程容......
  • [ABC373F] Knapsack with Diminishing Values
    AtCoder比较遗憾,E题用了太多时间了,没做出来。当时看到有平方感觉难道是斜率优化之类的?这下猜对了。拜谢WA90。不过官解好像没用斜率优化?不会。设\(f_{i,j}\)表示前\(i\)个物品一共用了\(j\)的体积。直接暴力做是三次方的。当加入一个体积为\(w\),价值为\(v\)的物品......
  • 题解 ABC373G【No Cross Matching】/ POJ3565【Ants】
    题目描述年轻的自然主义者比尔在学校里研究蚂蚁。他的蚂蚁以生活在苹果树上的蚜虫为食。每个蚂蚁群需要自己的苹果树来养活自己。比尔有一张地图,上面标有\(n\)个蚂蚁群和\(n\)棵苹果树的坐标。他知道蚂蚁从它们的蚂蚁群到它们的取食地点,然后返回蚂蚁群,都是使用化学标记的路线......