BZOJ4004 [JLOI2015]装备购买[贪心+线性基+高消]
一个物品可以被其他物品表出,说明另外的每个物品看成矩阵的一个行向量可以表出该物品代表的行向量。
于是构造矩阵,求最多选多少个物品,就是尽可能用已有的物品去表示,相当于去消去一些没必要物品,
类似于xor的线性基,这里是实数的线性基。
通过高斯消元不断消除,看消出几行全是零的即可。也就是看这个线性空间基底的维数或者说矩阵的秩。
但是本题还要选的东西花费最少。可以考虑每次消元时,选择一行代表的物品花费最小的行向量来消剩下的(贪心策略)。
如果不选这个,那么之后选出的若干个,如果真的可以表出这个的话,那将最大花费物品换成当前这个,
一定可行(可以列式子证明)且更优。
注意:本题丧心病狂卡精度,试验过后选择$\text{long double} $以及$\text{eps=1e-5}$效果最佳。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define dbg(x) cout << #x << " = " << x <<endl
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<int,int> pii;
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline char MIN(T&A,T B){return A>B?(A=B,):;}
template<typename T>inline char MAX(T&A,T B){return A<B?(A=B,):;}
template<typename T>inline void _swap(T&A,T&B){A^=B^=A^=B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=+;
const db eps=1e-;//mistake
db A[N][N];
int val[N],ans;
int n,m,tmp; int main(){//freopen("3.in","r",stdin);freopen("3.ans","w",stdout);
read(n),read(m);
for(register int i=;i<=n;++i)for(register int j=;j<=m;++j)read(A[i][j]);
for(register int i=;i<=n;++i)read(val[i]);
val[]=;int i,c;
for(i=,c=;c<=m;++c){
tmp=;
for(register int l=i;l<=n;++l)if(fabs(A[l][c])>eps&&val[tmp]>val[l])tmp=l;
if(!tmp)continue;
if(i^tmp)swap(A[tmp],A[i]),swap(val[tmp],val[i]);
ans+=val[i];
for(register int l=;l<=n;++l)if(i^l)
for(register int j=m;j>=c;--j)
A[l][j]-=A[l][c]/A[i][c]*A[i][j];
++i;
}
printf("%d %d\n",i-,ans);
return ;
}
其实本人也不太会线性代数,题解都是自己yy的,自己也不知道个所以然,比如关于消完之后全零的行向量到底本质是什么意思,为什么矩阵可以随便进行初等变换而不改变秩等等。上次翻了大学的线性代数,看了十几页就看不下去了。。哎太菜了,有空再找数学老师学吧
BZOJ4004 [JLOI2015]装备购买[贪心+线性基+高消]的更多相关文章
- [BZOJ4004][JLOI2015]装备购买(贪心+线性基)
求最小权极大线性无关组. 先将所有向量按权值排序,从小到大依次判断,若能被前面已选向量线性表出则不选,这样一定最优. 据说是用拟阵来证明,但感性理解一下感觉比较显然,首先这样个数一定是最多的,其次对于 ...
- 【题解】 bzoj4004: [JLOI2015]装备购买 (线性基)
bzoj4004,戳我戳我 Solution: 裸的线性基,这没啥好说的,我们说说有意思的地方(就是我老是wa的地方) Attention: 这题在\(luogu\),上貌似不卡精度,\(bzoj\) ...
- 洛谷P3265 [JLOI2015]装备购买(线性基+高斯消元)
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 不难看出题目讲的就是线性基 这种最小化权值的问题一般都是贪心的,就是按价值从低到高考虑每一个是否能选 据说贪心的证明得用拟阵我不会 据说这题是实数意 ...
- BZOJ_4004_[JLOI2015]装备购买_线性基
BZOJ_4004_[JLOI2015]装备购买_线性基 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) ...
- 【BZOJ4004】装备购买(线性基)
[BZOJ4004]装备购买(线性基) 题面 BZOJ 洛谷 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am ...
- [JLOI2015]装备购买(线性基)
[JLOI2015]装备购买 题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 nn 件装备,每件装备有 \(m\) 个属性,用向量 \(\mathbf{z_i}\)=\((a_1, \ldots ...
- bzoj 4004 [JLOI2015]装备购买 拟阵+线性基
[JLOI2015]装备购买 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1820 Solved: 547[Submit][Status][Dis ...
- 【bzoj4004】【JLOI2015】装备购买 (线性基+高斯消元)
Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 < ...
- 洛谷P3265 [JLOI2015]装备购买 [线性基]
题目传送门 装备购买 格式难调,题面就不放了. 分析: 一句话,有$n$件物品,每件物品有$m$个属性和一个花费值,如果一个装备的属性值可以由其他装备的属性值改变系数后组合得到那就不买,求购买最多装备 ...
随机推荐
- 6-2 shell编程基础
shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...
- LeetCode.1128-等价多米诺骨牌对的数量(Number of Equivalent Domino Pairs)
这是小川的第394次更新,第428篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第259题(顺位题号是1128).给定多米诺骨牌列表,当且仅当(a == c且b == d ...
- Zebra架构与大数据架构优劣对比
zebra架构的缺点 文件存储方式的缺点 1. 一个文件如果特别大,这样会造成存储的问题.一台机器的磁盘也不可能存储特别大的文件 2. 该文件在查询.删除.修改的时候都会存在问题 3. 如果文件太多, ...
- 切换windows系统输入法的中英文,可以忽视是哪种打字法
调用windows的API //用户获取当前输入法句柄 [DllImport("imm32.dll")] public static extern IntPtr ImmGetCon ...
- python r r+;w w+;a a+;以及加不加b区别
#以下内容均在正常打开文件的情况下运行 一.列表格 模式 可做操作 若文件不存在 是否覆盖 r 只能读 报错 --- r+ 可读可写 报错 是 w 只能写 创建 是 w+ 可读可写 创建 是 a 只能 ...
- 编写java 程序与Linux进行远程连接并运行linux下的脚本
我这里是通过连接到centos6.5的大数据集群的主节点,并通过运行hadoop的启动脚本来启动hadoop 本人采用的是SSH的方式连接 通过创建maven项目来编写代码,在编写代码之前需要先导入架 ...
- postman测试webservice接口
- java解析json字符串详解(两种方法)
一.使用JSONObject来解析JSON数据官方提供的,所以不需要导入第三方jar包:直接上代码,如下 private void parseJSONWithJSONObject(String Jso ...
- 模板引擎StringTemplate和模板StringTemplateGroup的应用
博主很懒什么都没有留下,只留下了一个转载链接!!! http://www.cnblogs.com/Jerry-Chou/archive/2012/12/12/2814693.html
- 更换composer镜像源为阿里云
说一说我为什么会更换镜像源,今天我准备给公司的项目添加一个 Excel 导出的功能,需要 PhpSpreadsheet 插件来实现我的功能.输入命令发现提示我 Authentication req ...