当前位置: 代码迷 >> 综合 >> HDU 6435 Problem J. CSGO
  详细解决方案

HDU 6435 Problem J. CSGO

热度:46   发布时间:2023-12-01 21:23:27.0

题目传送门
代码:

#include<bits/stdc++.h>
using namespace std;typedef long long LL;
const int maxn=100000+100;struct Node{int s;int x[5];
}a[maxn],b[maxn];LL ma[35],mb[35];int main(){int T;scanf("%d",&T);while(T--){int n,m,k;scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++){scanf("%d",&a[i].s);for(int j=0;j<k;j++) scanf("%d",&a[i].x[j]);}for(int i=1;i<=m;i++){scanf("%d",&b[i].s);for(int j=0;j<k;j++) scanf("%d",&b[i].x[j]);}int cnt=1;int p=k;while(p--) cnt*=2;for(int i=0;i<cnt;i++) ma[i]=mb[i]=-1e18;for(int i=0;i<cnt;i++){for(int j=1;j<=n;j++){LL sum=a[j].s;for(int t=0;t<k;t++){if((i>>t)&1) sum+=a[j].x[t];else sum-=a[j].x[t];}ma[i]=max(ma[i],sum);}}for(int i=0;i<cnt;i++){for(int j=1;j<=m;j++){LL sum=b[j].s;for(int t=0;t<k;t++){if((i>>t)&1) sum+=b[j].x[t];else sum-=b[j].x[t];}mb[i]=max(mb[i],sum);}}LL Max=0;for(int i=0;i<cnt;i++) Max=max(Max,ma[i]+mb[cnt-i-1]);printf("%lld\n",Max);}
} 
  相关解决方案