混合颜料(类似矩阵求秩)

题目描述

你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节约的精神,你想购买更少的颜料就满足要求,所以兼职程序员的你需要编程来计算出最少需要购买几种颜色的颜料?

输入描述:

第一行为绘制这幅画需要的颜色种数n (1 ≤ n ≤ 50)
第二行为n个数x

i

(1 ≤ x

i

 ≤ 1,000,000,000),表示需要的各种颜料.

输出描述:

输出最少需要在商店购买的颜料颜色种数,注意可能购买的颜色不一定会使用在画中,只是为了产生新的颜色。

示例1

输入

3
1 7 3

输出

3
 1 import java.util.Arrays;
 2 import java.util.Scanner;
 3
 4 /**
 5  *
 6  * 混合颜料
 7  * @author Dell
 8  *
 9  *
10  *将所需的颜料数字转换成二进制自上向下排列
11  *如:  1 7 3
12  *    0001
13  *    0111
14  *    0011
15  *    进行亦或运算就是 取上下不同的
16  *    a⊕b = (?a ∧ b) ∨ (a ∧?b)
17  *如:0001 XOR 0111 = 0110 = 6
18  *
19  * 当一种颜料不能被其他颜料配出来时,我们就必须购买他
20  * 通过观察可以发现 这与 矩阵的变换 求秩类似
21  *
22  * 我们现在也需要  从小到大排列 颜色数字
23  * 依次消去前边的 1
24  *  消1时如果下边的树肯定大,如果异或得到的数比 上边的数小 ,说明消掉了 1可以保存,
25  *  如果异或 结果大 说明此过程 时 1^0 = 1不是消1 不保存
26  *
27  */
28 public class Main {
29 public static void main(String[] args) {
30     Scanner sc = new Scanner(System.in);
31     int n = sc.nextInt();
32     int [] sx = new int[n];
33     for (int i = 0; i < sx.length; i++) {
34         sx[i] = sc.nextInt();
35     }
36     Arrays.sort(sx);
37     for (int i = sx.length-1; i>0 ; i--) {
38         for (int j = i-1; j >=0; j--) {
39             if ((sx[j]^sx[i])<sx[j]) {
40                 sx[j] = sx[j]^sx[i];
41             }
42         }
43     }
44     int count = 0;
45     for (int i = 0; i < sx.length; i++) {
46         if (sx[i]!=0) {
47             count++;
48         }
49     }
50     System.out.println(count);
51 }
52 }

原文地址:https://www.cnblogs.com/the-wang/p/8979302.html

时间: 2024-07-31 03:40:16

混合颜料(类似矩阵求秩)的相关文章

[转载]机器学习中常用的矩阵求导公式

原文地址:机器学习中常用的矩阵求导公式作者:MachineLearner 矩阵求导好像读书的时候都没学过,因为讲矩阵的课程上不讲求导,讲求导的课又不提矩阵.如果从事机器学习方面的工作,那就一定会遇到矩阵求导的东西.维基百科上:http://en.wikipedia.org/wiki/Matrix_calculus , 根据Y与X的不同类型(实值,向量,矩阵),给出了具体的求导公式,以及一堆相关的公式,查起来都费劲. 其实在实际的机器学习工作中,最常用到的就是实值函数y对向量X的求导,定义如下(其

矩阵求导

Y = A * X --> DY/DX = A'Y = X * A --> DY/DX = AY = A' * X * B --> DY/DX = A * B'Y = A' * X' * B --> DY/DX = B * A' 于是把以前学过的矩阵求导部分整理一下: 1. 矩阵Y对标量x求导: 相当于每个元素求导数后转置一下,注意M×N矩阵求导后变成N×M了 Y = [y(ij)] --> dY/dx = [dy(ji)/dx] 2. 标量y对列向量X求导: 注意与上面不同

[转载]矩阵求导公式

原文地址:矩阵求导公式[转]作者:三寅 今天推导公式,发现居然有对矩阵的求导,狂汗--完全不会.不过还好网上有人总结了.吼吼,赶紧搬过来收藏备份. 基本公式:Y = A * X --> DY/DX = A'Y = X * A --> DY/DX = AY = A' * X * B --> DY/DX = A * B'Y = A' * X' * B --> DY/DX = B * A' 1. 矩阵Y对标量x求导: 相当于每个元素求导数后转置一下,注意M×N矩阵求导后变成N×M了 Y

[zt]矩阵求导公式

今天推导公式,发现居然有对矩阵的求导,狂汗--完全不会.不过还好网上有人总结了.吼吼,赶紧搬过来收藏备份. 基本公式:Y = A * X --> DY/DX = A'Y = X * A --> DY/DX = AY = A' * X * B --> DY/DX = A * B'Y = A' * X' * B --> DY/DX = B * A' 1. 矩阵Y对标量x求导: 相当于每个元素求导数后转置一下,注意M×N矩阵求导后变成N×M了 Y = [y(ij)] --> dY/

利用矩阵求斐波那契数列

利用矩阵求斐波那契数列 flyfish 2015-8-27 矩阵(matrix)定义 一个m*n的矩阵是一个由m行n列元素排成的矩形阵列.矩阵里的元素可以是数字符号或者数学式. 形如 {acbd} 的数表称为二阶矩阵,它由二行二列组成,其中a,b,c,d称为这个矩阵的元素. 形如 {x1x2} 的有序对称为列向量Column vector 设 A={acbd} X={x1x2} 则 Y={ax1+bx2cx1+dx2} 称为二阶矩阵A与平面向量X的乘积,记为AX=Y 斐波那契(Fibonacci

机器学习中的矩阵求导总结

下图为常见的矩阵求导公式及其推导.

矩阵求导术(上)

深度学习我认为最核心的被部分,是求导,更新的这个过程! 这里涉及的矩阵求导,我觉得很复杂,看了很多的方法,记忆法则,真的是越看越不懂! 清华那本书,也是太庞大了. 学习大佬这个矩阵求导术方法,矩阵求导,算法推理,真的是迎刃而解!非常的nice. 感谢大佬. 这里贴上图片,以防各种原因,丢失 原文知乎链接 原文地址:https://www.cnblogs.com/panfengde/p/10323182.html

矩阵求导术的应用

使用矩阵求导术的一些推到,示例 原文地址:https://www.cnblogs.com/panfengde/p/10323206.html

矩阵求导记录

矩阵求导 在看多元线性回归的闭式解的时候遇到矩阵求导问题,总体来讲矩阵求导与函数求导有极大的相似性,查看wiki后记录下矩阵求导的一些性质,方面日后查看. 用到比较多的公式如下(分母布局): \[ \frac{\partial \boldsymbol A\boldsymbol x}{\partial \boldsymbol x}=A^T \] \[ \frac{\partial \boldsymbol x^T\boldsymbol A}{\partial \boldsymbol x}=A \]