BZOJ 4004: [JLOI2015]装备购买 高斯消元解线性基
BZOJ严重卡精,要加 $long$ $double$ 才能过.
题意:求权和最小的极大线性无关组.
之前那个方法解的线性基都是基于二进制拆位的,这次不行,现在要求一个适用范围更广的方法.
考虑贪心:将向量组按照代价从小到大排序,依次考虑加入每一组向量,如果能被表示出来就加,表示不出来就不加.
你可能会举出一个反例:按照权值从小到大排序后要加入向量 $x,$ 但是后面有若干向量 $a,b,c,d...$ 能表示出 $x,$ 而 $x$ 却表示不出它们,你可能会说最优解法是加入后面那几个,而不加入 $x.$
然而,你可以列一个等式,就是 $a\times x_{1}+b\times x_{2}+c\times x_{3}....=x,$ 将 $x$ 移到左面,随便一个向量移到右面,变成 $a\times x_{1}+b\times x_{2}-x....=c\times x_{3}.$
而 $x$ 的代价显然要小于 $c,$ 所以我们上述的贪心策略是正确的.
#include <cstdio>
#include <algorithm>
#define N 600
#define eps 1e-5
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
struct Node
{
int w;
long double a[N];
}p[N];
bool cmp(Node a,Node b)
{
return a.w<b.w;
}
int n,m;
int mark[N];
int main()
{
int i,j;
// setIO("input");
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
for(j=1;j<=m;++j)
{
double c;
scanf("%lf",&c);
p[i].a[j]=(long double) c;
}
}
for(i=1;i<=n;++i) scanf("%d",&p[i].w);
sort(p+1,p+1+n,cmp);
int ans=0, cnt=0, k;
for(i=1;i<=n;++i)
{
for(j=1;j<=m;++j)
{
if(p[i].a[j]>=-eps&&p[i].a[j]<=eps) continue;
if(!mark[j])
{
mark[j]=i,ans+=p[i].w,++cnt;
break;
}
else
{
long double div=(long double)p[i].a[j]/p[mark[j]].a[j];
for(k=j;k<=m;++k)
{
p[i].a[k]=(long double)(p[i].a[k]-(long double)div*p[mark[j]].a[k]);
}
}
}
}
printf("%d %d\n",cnt,ans);
return 0;
}
BZOJ 4004: [JLOI2015]装备购买 高斯消元解线性基的更多相关文章
- BZOJ 4004 JLOI2015 装备购买 高斯消元+线性基
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4004 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装 ...
- BZOJ 4004: [JLOI2015]装备购买 [高斯消元同余 线性基]
和前两(一)题一样,不过不是异或方程组了..... 然后bzoj的新数据是用来卡精度的吧..... 所有只好在模意义下做啦 只是巨慢无比 #include <iostream> #incl ...
- BZOJ4269再见Xor——高斯消元解线性基
题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两 ...
- 【bzoj4004】[JLOI2015]装备购买 贪心+高斯消元求线性基
题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j < ...
- 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...
- 【bzoj3105】[cqoi2013]新Nim游戏 高斯消元求线性基
题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴,但不能同时从 ...
- 【bzoj4269】再见Xor 高斯消元求线性基
题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两 ...
- HDU3949/AcWing210 XOR (高斯消元求线性基)
求第k小的异或和,用高斯消元求更简单一些. 1 //用高斯消元求线性基 2 #include<bits/stdc++.h> 3 using namespace std; 4 #define ...
- bzoj 4004: [JLOI2015]装备购买 拟阵 && 高消
4004: [JLOI2015]装备购买 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 337 Solved: 139[Submit][Status ...
随机推荐
- 使用kafka-eagle监控Kafka
# 监控kafka集群,开启监控趋势图使用 # 有一个问题,需要在kafka-server-start.sh文件中配置端口,有如下三种办法 # 第一种:复制并修改kafka目录,比如kafka-1,k ...
- linux常用的bash指令
文本处理 awk sed grep sort uniq cat cut echo fmt tr nl egrep fgrep wc 进程监视 ps top htop atop lsof 网络 nmap ...
- ModbusRtu通信报文详解【二】
这里接着上一篇内容对ModbusRtu的通信报文做个详细描述: [1]强制单个线圈 功能码:05H [2]预置单个寄存器 功能码:06H [3]强制多个线圈 功能码;0FH [4]预置多个寄存器 功能 ...
- C# 操作地址 从内存中读取写入数据(初级)
本示例以植物大战僵尸为例, 实现功能为 每1秒让阳光刷新为 9999.本示例使用的游戏版本为 [植物大战僵尸2010年度版], 使用的辅助查看内存地址的工具是 CE. 由于每次启动游戏, 游戏中阳光 ...
- mysql if else count 计数
select mobile,avg(total),sum(click_day*click_money),sum(click_day),count(push_status),sum(clicks),co ...
- Google谷歌总部员工家庭活动
每年Google总部都会有针对家庭的两个大活动,其中一个就是万圣节.专门针对员工孩子的.#2019Googleween 今年的Googleween分几个场地,所以每个场地很小.她爸爸只带她去了一个.我 ...
- 如何为 esp32 编译和配置及烧写 MicroPython 固件。
MicroPython 在 esp-idf (esp32) 上编译固件 esp32 编译 micropython 的固件相关的资料应该很多吧,我也会出一篇,但会额外讲一些 linux 的东西的. 资料 ...
- Linux JDK升级
一.jdk1.4卸载 Redhat Enterprise 5 中自带安装了jdk1.4,在安装jdk1.6前,把jdk1.4卸载: 1. 首先查看系统自带的JDK版本: [root@linux ~]# ...
- 最新Cocoapods 安装及使用
1.移除现有Ruby默认源 gem sources --remove https://rubygems.org/ 2.使用新的源 gem sources -a https://ruby.taobao. ...
- QQ大盗 - 巧用clientkey
场景: 1.将程序发给好友,好友打开 qq昵称就会被秒改为”账号已被盗“. 2.将程序运行在自己的电脑,让那些随意借用电脑看片聊天的室友产生一个觉悟:乱使用别人电脑很可能会泄露隐私. 思路: 通过数据 ...