求条
查看原帖
求条
779912
yunyu2楼主2024/8/10 17:10
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <ctime>
#include <vector>
#define rin(i,a,b) for(int i=(a);i<=(b);i++)
#define rec(i,a,b) for(int i=(a);i>=(b);i--)
#define trav(i,a) for(int i=head[(a)];i;i=e[i].nxt)
typedef long long LL;
using std::cin;
using std::cout;
using std::endl;

inline int read(){
	int x;scanf("%d",&x);return x;
}

const int MAXN=1005;
const int MAXM=305;
int n,m,v[MAXN],c[MAXM],blg[MAXN];
bool vis[MAXN];
std::vector<int> vec[MAXM],maxvec[MAXM];
struct Pair{
	int id,w;
	inline friend bool operator < (Pair A,Pair B){
		return 1.0*A.w/v[A.id]>1.0*B.w/v[B.id];
	}
}a[MAXM][MAXN];

inline int work(){
	memset(vis,0,sizeof vis);
	int ret=0;
	rin(i,1,m){
		vec[i].clear();
		int rem=c[i];
		rin(j,1,n){
			if(vis[a[i][j].id]||rem<v[a[i][j].id]) continue;
			if((rand()%(n*2))>n+vec[i].size()) continue;
			vec[i].push_back(a[i][j].id);
			vis[a[i][j].id]=1;
			rem-=v[a[i][j].id];
			ret+=a[i][j].w;
		}
	}
	return ret;
}

int main(){
	//freopen("drawer10.in","r",stdin);
	//freopen("drawer10.out","w",stdout);
	srand(time(0));
	n=read(),m=read();
	rin(i,1,n) v[i]=read();
	rin(i,1,m) c[i]=read();
	rin(i,1,n) rin(j,1,m) a[j][i]=(Pair){i,read()};
	rin(i,1,m) std::sort(a[i]+1,a[i]+n+1);
	int maxans=0;
	rin(k,1,10000){
		int temp=work();
		if(temp>maxans){
			memset(blg,0,sizeof blg);
			rin(i,1,m) rin(j,0,(int)vec[i].size()-1)
				blg[vec[i][j]]=i;
			maxans=temp;
		}
	}
	rin(i,1,n) printf("%d ",blg[i]);
	printf("\n");
	return 0;
}
2024/8/10 17:10
加载中...