hdu6435 Problem J. CSGO标程讲解以及改正标程的一个错误(本来第一个样例过不了2333) 以及 poj2926 五维曼哈顿距离模板
比赛的时候抄poj2926的模板,但改不来啊orz
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int dem=; //维数
const int maxxn=;
const double inf=1e200;
struct Point{
double x[dem];
}p[maxxn];
int n;
double minx[<<dem], maxx[<<dem]; double solve(){
int i, j, k, t, tmp=<<dem;
double s, ans=-inf;
for(i=; i<tmp; i++){
minx[i]=inf;
maxx[i]=-inf;
}
for(i=; i<n; i++){
for(j=; j<tmp; j++){
t=j;s=;
for(k=; k<dem; k++){
if(t&)
s+=p[i].x[k];
else s-=p[i].x[k];
t>>=;
}
if(maxx[j]<s)maxx[j]=s;
if(minx[j]>s)minx[j]=s;
}
}
for(i=; i<tmp; i++){
if(maxx[i]-minx[i]>ans)
ans=maxx[i]-minx[i];
}
return ans;
}
int main(){
//freopen("1.txt", "r", stdin);
int i, j;
while(scanf("%d", &n)!=EOF){
for(i=; i<n; i++){
for(j=; j<dem; j++)
scanf("%lf", &p[i].x[j]);
}
printf("%.2f\n", solve());
}
return ;
}
后来看了标程,感觉上面那个算法是瞎搞的,于是改成了正确的姿势:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include<ctime>
using namespace std;
#define LL double int T, n, m, K ;
LL A[], B[], Ans,val,x[]; int main()
{
int i, k, S; K=;
cin>>n;
Ans = ;
for (int i = ; i < ; i++)A[i] = B[i] = -1e200; for (i = ; i <= n; i++)
{ for (k = ; k<K; k++)
scanf("%lf", &x[k]);
for (S = ; S< << K; S++)
{
LL Sum = ;
for (k = ; k<K; k++)
Sum += x[k] * ((((S >> k) & ) << ) - );
A[S] = max(A[S], Sum);
}
} for (S = ; S< << K; S++)
{Ans = max(Ans, A[S] + A[( << K) - - S]);
}
printf("%.2lf\n", Ans); }
/*
3
2 5 6 2 1.5
1.2 3 2 5 4
7 5 3 2 5 */
这个程序的二进制操作比较秀,具体来说:
((((S >> k) & 1) << 1) - 1)这一句是if(S的第k位为1)f=1; else f=-1 的缩写(感觉反而更麻烦了233)
A[S] + A[(1 << K) - 1 - S]这一句的意思是把符号相反的一组最优向量加起来。因为(1 << K) - 1 - S与S的0,1 互补,对应向量里+、- 互补。
标程唯一被hack的地方是数组初始化时用了memset,应该全部赋值为-inf
下面给出标程(改了一句)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include<ctime>
using namespace std;
#define LL long long int T, n, m, K, val, x[];
LL A[], B[], Ans; int main()
{
int i, k, S;
scanf("%d", &T);
while (T--)
{
scanf("%d%d%d", &n, &m, &K);
Ans = ;
//memset(A, 0, sizeof(A));
//memset(B, 0, sizeof(B));
for (int i = ; i < ; i++)A[i] = B[i] = -1e18;
for (i = ; i <= n; i++)
{
scanf("%d", &val);
for (k = ; k<K; k++)
scanf("%d", &x[k]);
for (S = ; S< << K; S++)
{
LL Sum = val;
for (k = ; k<K; k++)
Sum += x[k] * ((((S >> k) & ) << ) - );
A[S] = max(A[S], Sum);
}
} for (i = ; i <= m; i++)
{
scanf("%d", &val);
for (k = ; k<K; k++)
scanf("%d", &x[k]);
for (S = ; S< << K; S++)
{
LL Sum = val;
for (k = ; k<K; k++)
Sum += x[k] * ((((S >> k) & ) << ) - );
B[S] = max(B[S], Sum);
}
} for (S = ; S< << K; S++)
Ans = max(Ans, A[S] + B[( << K) - - S]);
printf("%lld\n", Ans);
}
} /*
1
2 2 1
0 1
0 2
0 4
0 3 2
2 2 1
0 233
0 666
0 123
0 456
2 2 1
100 0 1000 100 1000 100
100 0 */
hdu6435 Problem J. CSGO标程讲解以及改正标程的一个错误(本来第一个样例过不了2333) 以及 poj2926 五维曼哈顿距离模板的更多相关文章
- [hdu6435]Problem J. CSGO
题目大意:给定$n$个$A$类元素和$m$个$B$类元素,每类元素有值$S$和$k$个值$x_0,x_1,\dots,x_{k-1}(k\leqslant 5)$. 要求选出一个$A$类元素$a$和$ ...
- HDU - 6435 Problem J. CSGO (曼哈顿距离变换)
题目大意:有两类武器(主武器和副武器),每类有若干把,每把武器都有一个基础属性S,以及k个附加属性,让你选一把主武器M和一把副武器S,使得最大. 显然后面的和式是一个k维的曼哈顿距离,带绝对值符号不好 ...
- HDU - 6435 Problem J. CSGO 2018 Multi-University Training Contest 10 (二进制枚举+思维)
题意:有N个主武器(MW)和M个副武器(SW),每个武器都有自己的S值,和K个附加属性xi.要选取一对主副武器搭配,搭配后获得的性能由该公式得出: 求获得最大的性能为多少. 分析:由于|xm - xs ...
- FZu Problem 2236 第十四个目标 (线段树 + dp)
题目链接: FZu Problem 2236 第十四个目标 题目描述: 给出一个n个数的序列,问这个序列内严格递增序列有多少个?不要求连续 解题思路: 又遇到了用线段树来优化dp的题目,线段树节点里 ...
- Problem 2236 第十四个目标
Problem 2236 第十四个目标 Accept: 4 Submit: 6Time Limit: 1000 mSec Memory Limit : 32768 KB Problem D ...
- 实验12:Problem J: 动物爱好者
#define null ""是用来将字符串清空的 #define none -1是用来当不存在这种动物时,返回-1. 其实这种做法有点多余,不过好理解一些. Home Web B ...
- Codeforces Gym 100342J Problem J. Triatrip 求三元环的数量 bitset
Problem J. Triatrip Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...
- The Ninth Hunan Collegiate Programming Contest (2013) Problem J
Problem J Joking with Fermat's Last Theorem Fermat's Last Theorem: no three positive integers a, b, ...
- Codeforces Gym 100342J Problem J. Triatrip bitset 求三元环的数量
Problem J. TriatripTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/att ...
随机推荐
- 基础006_pg109_IP-Xfft
作者:桂. 时间:2018-05-09 07:20:48 链接:http://www.cnblogs.com/xingshansi/p/9012232.html 前言 简要记录xilinx FFT的 ...
- Atitit 验证 数字验证 非空验证的最佳算法 h5
Atitit 验证 数字验证 非空验证的最佳算法 h5 <td><select class="searchBox-select" style=" ...
- Socket网络编程--epoll小结
以前使用的用于I/O多路复用为了方便就使用select函数,但select这个函数是有缺陷的.因为它所支持的并发连接数是有限的(一般小于1024),因为用户处理的数组是使用硬编码的.这个最大值为FD_ ...
- 每日英语:Don't Call Us Bossy
[Confident girls are often called the other B-word, and it can keep them from reaching their full po ...
- Android开发(十二)——头部、中部、底部布局
参考: [1] http://www.thinksaas.cn/group/topic/82898/ [2] http://***/Article/12399 其实RadioGroup不好使,不能图片 ...
- PHP更改自动加载的顺序
composer的锅 自从PHPer们用上了composer后,对于传统的加载方式倒是不会用了,可谓是"收之东隅,失之桑榆". 下面说一下怎么改变加载顺序来覆写Laravel中的h ...
- Spring Security 指定登陆入口
spring security除通过form-login的熟悉指定登陆还可以通过entry-point-ref 指定登陆入口.具体配置如下: <?xml version="1.0&qu ...
- FilenameFilter总结
一.FilenameFilter介绍 java.io.FilenameFilter是文件名过滤器,用来过滤不符合规格的文件名,并返回合格的文件: 一般地: (1)String[] fs = f.l ...
- FatTree拓扑结构
FatTree拓扑结构是由MIT的Fares等人在改进传统树形结构性能的基础上提出的,属于switch-only型拓扑. 整个拓扑网络分为三个层次:自上而下分别为边缘层(edge).汇聚层(aggre ...
- one-to-all及all-to-all网络通信模式
在这两种模式下,因为 占用的通信通道非常高,形成了一个一对多的通道 甚至是多对多的通道,导致现有的fattree网络结构负载太大.