【BZOJ】5068: 友好的生物-约束放宽

传送门:bzoj5068


题解

先把 c i c_i ci乘进值里,则 a n s = m a x [ ( ∑ i = 1 k − 1 ∣ a x i − a y i ∣ ) − ∣ a x k − a y k ∣ ] ans=max[(\sum_{i=1}^{k-1}|a_{xi}-a_{yi}|)-|a_{xk}-a_{yk}|] ans=max[(i=1k1axiayi)axkayk]

注意到 ≤ 5 \leq5 5,只看前 k − 1 k-1 k1项就是一个拆绝对值的问题,直接 2 k − 1 2^{k-1} 2k1枚举每个绝对值的符号,由于求的是最大值,而不合法的情况值不会大于合法的值。

那么按第 k k k项属性排序加入即可。


代码

#include<bits/stdc++.h>
#define gc getchar
using namespace std;
const int N=1e5+10,inf=0x7f7f7f7f;

int xs[N],n,K,c[N],ans=-inf;

struct P{
   int a[6],k;
   bool operator<(const P&ky)const{return k<ky.k;}
}t[N];

char cp;
inline void rd(int &x)
{
    cp=getchar();int f=0;x=0;
    for(;!isdigit(cp);cp=getchar()) if(cp=='-') f=1;
    for(;isdigit(cp);cp=getchar()) x=(x<<3)+(x<<1)+(cp^48);
    if(f) x*=-1;
}

inline void sol(int S)
{
	int i,j,mn=inf,res;
	for(i=1;i<K;++i,S>>=1) xs[i]=(S&1)?1:(-1);
	for(i=1;i<=n;++i){
		for(res=0,j=1;j<K;++j) res+=xs[j]*t[i].a[j];
		res-=t[i].k;if(mn<inf) ans=max(ans,res-mn);
		if(res<mn) mn=res;
	}
}

int main(){
	int i,j,s,S,res;
	rd(n);rd(K);S=1<<(K-1);
	for(i=1;i<=K;++i) rd(c[i]);
	for(i=1;i<=n;++i){
		for(j=1;j<K;++j){rd(t[i].a[j]);t[i].a[j]*=c[j];}
		rd(t[i].k);t[i].k*=c[K];
	}
	sort(t+1,t+n+1);
	for(s=0;s<S;++s) sol(s);
	printf("%d",ans);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值