最后一战

220 篇文章 2 订阅
89 篇文章 0 订阅

题目

题目描述
垃圾 J Z M \tt JZM JZM 不适合继续学习 O I OI OI 了。他到了离开的时候了。这是他的退役赛。

这场退役赛有两支队伍。队伍的综合评定分数,等于队伍中每个成员的分数之和。公平起见,两支队伍的综合评定分数必须相等。

每个人的出现都会带来比赛热度的影响,最终热度为每个人的影响力之和。我们当然要让最终热度最大。

现在给出两支队伍的候选人,每个队伍都可以从自己那一方的候选人中选任意多个人。求出最终热度的最大值。

数据范围与提示
两支队伍分别的候选人数量 n , m n,m n,m 均不超过 1 0 3 10^3 103

每个候选人的综合评定分数 w ≤ 1 0 3 w\le 10^3 w103 ,影响力 v v v − 1 0 9 -10^9 109 1 0 9 10^9 109 之间。

人生就像打拳击。你打倒一个又一个对手,最终站上冠军的王座。最终你被别人打败,新的时代,又会开始。

思路

可以把第二支队伍中的候选人的能力值看成负数,问题转化为选择为 0 0 0 的子集。

仔细想想,如果我们一个选负、一个选正,交替出现,那么权值和始终在 [ − 1 0 3 , 1 0 3 ] [-10^3,10^3] [103,103] ,就可以背包乱来。

尽管不可能有那么好的情况,我们也可以引入这个思想,随机打乱原序列,然后把背包的容量适当调小。

代码

#include <cstdio>
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
typedef long long int_;
inline int readint(){
	int a = 0; char c = getchar(), f = 1;
	for(; c<'0'||c>'9'; c=getchar())
		if(c == '-') f = -f;
	for(; '0'<=c&&c<='9'; c=getchar())
		a = (a<<3)+(a<<1)+(c^48);
	return a*f;
}
inline void getMax(int_ &a,const int_ &b){
	(a < b ? a = b : 0); return ;
}

const int MaxN = 1000;
const int M = 100000;
const int_ infty = (1ll<<61)-1;

struct Node{
	int w, v;
};
Node node[MaxN<<1];
int_ dp[M+1];

int main(){
	freopen("game.in","r",stdin);
	freopen("game.out","w",stdout);
	srand(5201314);
	int n = readint(), m = readint();
	for(int i=0; i<n; ++i){
		node[i].w = readint();
		node[i].v = readint();
	}
	for(int i=n; i<n+m; ++i){
		node[i].w = -readint();
		node[i].v = readint();
	}
	/* random_suffle */ ;
	for(int i=0; i<n+m; ++i){
		int x = rand()%(n+m-i);
		swap(node[i],node[i+x]);
	}
	/* do dp once */ ;
	for(int i=0; i<=M; ++i)
		dp[i] = -infty;
	dp[M>>1] = 0;
	for(int i=0; i<n+m; ++i){
		if(node[i].w < 0)
		for(int j=0; j-node[i].w<=M; ++j)
			getMax(dp[j],dp[j-node[i].w]+node[i].v);
		if(node[i].w > 0)
		for(int j=M; j>=node[i].w; --j)
			getMax(dp[j],dp[j-node[i].w]+node[i].v);
	}
	printf("%lld\n",dp[M>>1]);
	return 0;
}
花钱买来的 ,自己亲测可执行,~ 下载下来是个 txt文本,里面有 下载地址,跟密码! 这款游戏 类似王者荣耀! 客户端用 unity 4.6直接打开编译,生成exe,或者安卓APK(需要装JDK,SDK), 服务端按教程操作就可以了! 最后一战OL》是国内首款原创精品MOBA手游,是一款由前暴雪文案亲自操刀世界观,日韩专业团队打造美术场景,新加坡团队精心制作战斗音乐的旷世之作!' e9 H' Q* w: Z5 r 《最后一战OL》超快速的匹配对战、默契的团队协作给你带来意犹未尽的快感,在传统的MOBA游戏中融入了诸多创新玩法,吸附野怪技能、祭坛超级兵种、怒气超神爆发的同时多样性的英雄供你挑选!百余种装备搭配助您打造最强王者,超神不断!带上你的战友并肩协作,一起来体验《最后一战》这款引领潮流的精品手游吧!2 n" r$ Q' |+ \; w$ A' q! ^ 本资源是完整的,可以编译进游戏的。前端采用Unity3D,可以在 Unity3D 4.0 + 以上版本编译运行,后端服务器部分采用 C++开发,需要在 VS 2010 下完成编译。数据库采用 MySQL。 最后一战经过测试,可以进游戏,搭建很简单,只要几步简单的操作就能跑起来 1、客户端打开 用的u3d 4.6版本打开的,没有发现什么问题,可以直接编译 2、服务端 首先用vs2010打开server》Allserver.sln,点击编译,编译要花点时间,编译完成后,可能会出现几个红色的文字,不用管他,暂时没发现有影响。 然后打开Server\Bin\x64\Release\dbsql\Rebuild.bat,创建数据库,在这里要编辑下Rebuild.bat里面的内容,记事本打开,然后将-uroot -p123321,改成你自己的数据库名称和密码, root改成你的数据库名称,123321改成你自己的数据库密码。+ H7 s. z7 f/ g8 Q9 V+ G 数据库创建完成后,打开server》start.bat,打开的几个窗口也会有红字的文字,不用管,暂时没发现有影响。 注意点: 1、数据库安装-》数据库安装是个难活,我在自己电脑上按了N次,没成功,总是提示联不到数据库,可能跟系统有关系,回头再研究下 2、服务端编译,vs在编译后有红色的文字,之前以为是报错,一直改,没解决,后来不管他了,直接跑,居然过了。。。。 3、修改rebuild.bat,一定要修改成你自己的数据库名字和密码,不然创建不成功。 3、编译u3d客户端,就可以进游戏了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值