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 ...
随机推荐
- Main.storyboard: WKWebView before iOS 11.0 (NSCoding support was broken in previous versions)
在工程里用 故事板写了 wkwebview 如果运行在 ios11以下 就会报这个错误,如果要支持iOS 11 以下的用户,请重写View部分,使用代码调用WKWebView,而不用使用故事版来加 ...
- xcode9 报错 “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift
用xcode编译后会出现这个错误的情况: 1.使用cocopod导入第三方swift包后,swift的包是比较老的swift开发的. 2.用xcode9 打开老的swift(比如swift2.0)的工 ...
- SQL Server 数据库基础笔记分享(下)
前言 本文是个人学习SQL Server 数据库时的以往笔记的整理,内容主要是对数据库的基本增删改查的SQL语句操作和约束,视图,存储过程,触发器的基本了解. 注:内容比较基础,适合入门者对SQL S ...
- 9.5 翻译系列:数据注解之ForeignKey特性【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code ...
- mariadb(MySql)设置远程访问权限
[问题]mariadb(MySql)安装之后,本地连接mysql是可以的,但是远程的机器不能连接和访问. [解决]修改mysql远程连接的ip限制配置. [步骤]1.本地mysql客户端连接mysql ...
- 【Spark 深入学习 04】再说Spark底层运行机制
本节内容 · spark底层执行机制 · 细说RDD构建过程 · Job Stage的划分算法 · Task最佳计算位置算法 一.spark底层执行机制 对于Spark底层的运行原理,找到了一副很好的 ...
- C++ 类占用空间计算方式
1.一个类占用的空间主要是属性占用空间,而成员函数一般不占用空间,但是虚函数占用空间,需要说明的是,无论多少个虚函数,只要占用4个字节即可,也就是索引指向一个虚拟表的首位置.另外需要说明的是占用空间都 ...
- Asp.Net 导入Excel自动获取表名
public static DataSet ReadExcel(string Path, string fileType) { //服务器需要安装驱动 //http://download.micros ...
- 【原】使用Json作为Python和C#混合编程时对象转换的中间文件
一.Python中自定义类对象json字符串化的步骤[1] 1. 用 json 或者simplejson 就可以: 2.定义转换函数: 3. 定义类 4. 生成对象 5.dumps执行,引入转换函 ...
- How to Catch Ctrl-C in Shell Script
ref: https://stackpointer.io/script/how-to-catch-ctrl-c-in-shell-script/248/ #!/bin/sh # this func ...