首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

这是一个程序,可以计算出使用任意数量的硬币可以制作GB2.50的所有不同方法

这个程序是一个硬币组合问题,目标是计算出使用任意数量的硬币可以制作GB2.50的所有不同方法。下面是一个完善且全面的答案:

硬币组合问题是一个经典的组合优化问题,它在实际生活中有很多应用场景,比如货币找零、零钱兑换等。该问题的目标是找到使用不同面额硬币的组合方式,使得总金额等于给定的目标金额。

在解决硬币组合问题时,可以采用动态规划的方法。动态规划是一种将问题分解为子问题并逐步求解的算法思想。下面是一个可能的解决方案:

  1. 定义一个数组dp,其中dp[i]表示总金额为i时的硬币组合方法数。
  2. 初始化dp数组,将dp[0]设置为1,表示总金额为0时只有一种组合方式。
  3. 遍历硬币的面额,对于每个面额coin,从coin到目标金额target逐步计算dp数组的值。
    • 对于每个面额coin,遍历金额i从coin到target,更新dp[i]的值。
    • 更新方式为dp[i] += dp[i-coin],表示总金额为i时的组合方式等于总金额为i-coin时的组合方式加上当前硬币coin的组合方式。
  • 最终,dp[target]即为使用任意数量的硬币可以制作GB2.50的所有不同方法数。

这个程序可以使用各类编程语言进行实现,例如Python、Java、C++等。具体实现代码可以根据不同的编程语言进行调整。

在腾讯云的产品中,与云计算相关的产品有云服务器、云数据库、云存储等。这些产品可以为开发者提供强大的计算、存储和数据库等基础设施支持,帮助开发者构建和部署云计算应用。以下是腾讯云相关产品的介绍链接地址:

  • 云服务器(ECS):提供弹性计算能力,可根据业务需求快速创建、部署和管理虚拟服务器实例。产品介绍链接
  • 云数据库(CDB):提供高性能、可扩展的关系型数据库服务,支持主流数据库引擎,如MySQL、SQL Server等。产品介绍链接
  • 云存储(COS):提供安全、稳定、低成本的对象存储服务,适用于图片、视频、文档等各类数据的存储和管理。产品介绍链接

通过使用腾讯云的相关产品,开发者可以快速搭建云计算环境,实现硬币组合问题等各类应用场景的计算需求。

相关搜索:有没有一种方法可以将任意数量的单元格组合到一个表中?是否可以使用mediatR处理一个查询,但使用不同的处理程序?是否可以使用一个应用程序发送具有不同listeningConnectionStrings的通知?使用一个主类可以在我的组件中包含我需要的所有类。这是不是很糟糕?如何制作一个可以迭代使用的react组件来展示不同的产品。就像电子商务网站我们是否可以为在不同地域创建的所有VMSS使用一个应用网关?我正在尝试制作一个程序,它可以根据用户在C++中的选择来运行不同的函数我可以在一个程序中使用具有不同订阅的多个事件中心吗?有没有一种方法可以在Tkinter中用for循环制作按钮,同时给每个按钮一个不同的命令?是否可以在一个测试中使用两次存根方法来返回不同的结果?是否可以设计一个纯粹的管理类(不是要实例化),并使用所有静态方法?有没有一种方法可以使用一个命令设置图形中所有文本的格式?如何定义一个可以在Rails中的任何地方使用的应用程序级全局方法?我可以在同一个Swing应用程序中使用两种不同的外观吗?从另一个类继承而来的类可以使用具有不同返回类型的相同方法吗?一个程序中两个不同的实体可以有相同的id吗?还是所有的实体必须严格地有一个id?有没有一种方法可以打包加载项,使用户只需单击一个即可使用其中的所有宏?是否可以使用动态链接从两个不同的域名链接到同一个应用程序?在OpenGL中有一种方法可以获得着色器程序使用的所有制服和属性的列表吗?是否有一种方法(或Clojure中的条件语句)可以检查所有不同的条件,即使其中一个条件为false?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

dotnet 教你写一个可以搞炸本机所有 WCF 应用的程序方法

本文来告诉大家一个有趣且简单的方法,此方法可以将本机的 WCF 玩坏,不敢说真的搞炸本机所有 WCF 应用,但搞炸大部分基于 WCF 的软件还是没有问题的。...在开始之前,咱先来复习如何制作一个简单的 WCF 服务端和客户端的方法。...预期是服务端的 DataServer 的 Foo 方法将会被客户端进行调用,被客户端传入了 "123" 在服务端的控制台输出 接下来开始开发一个用来捣乱的 WCF 控制台,这是一个 WCF 服务端。...这个控制台应用的 csproj 和上面两个相同,唯一不同的是在入口程序的定义和运行的方式。...预计大概到 2022 的时候,这个库能更加稳定 本文所有代码放在github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码

48920

最少硬币问题------dp思想

最少硬币问题 Description 设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。现要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组Coins[1:n]中。...对任意钱数0≤m≤20001,设计一个用最少硬币找钱m的方法。...对于给定的1≤n≤10,硬币面值数组T和可以使用的各种面值的硬币个数数组Coins,以及钱数m,0≤m≤20001,计算找钱m的最少硬币数。...Input 输入数据第一行中只有1个整数给出n的值,第2行起每行2个数,分别是T[j]和Coins[j]。最后1行是要找的钱数m。 Output 输出数据只有一个整数,表示计算出的最少硬币数。...Output 5 #include #define inf 0x3f3f3f3f using namespace std; int t[12],c[12];//面值、数量

30620
  • 编程之美----NIM游戏

    每一次行动,Alice和Bob可以选择从一堆石子中取出任意数量的石子。至少取1颗,至多取出这一堆剩下的所有石子。 Alice和Bob轮流行动,取走最后一个石子的人获得胜利。...它的变体是规定拿光铜板的人输,只要注意某种特殊形态(只有1列不为1),就可以了! 有很多人把这个方法写成计算机程序,来和人对抗,不知就理的人被骗得团团转,无不惊叹计算机的神奇伟大。...比如说我刚才说当只有两堆石子且两堆石子数量相等时后手有必胜策略,也就是这是一个P-position,下面我们依靠定义证明一下(3,3)是一个P是一个P是一个P-position。...如果游戏开始时只有一堆硬币,游戏人I则通过取走所有的硬币而获胜。现在设有2堆硬币,且硬币数量分别为N1和N2。游戏人取得胜利并不在于N1和N2的值具体是多少,而是取决于它们是否相等。设N1!...于是,我们可以认为每一堆硬币数由2的幂数的子堆组成。这样,含有57枚硬币大堆就能看成是分别由数量为25、24、23、20的各个子堆组成。

    1.3K90

    LeetCode-322-零钱兑换

    # LeetCode-322-零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。...1、回溯: 用S代表总金额,ci是第i枚硬币的面值,xi是面值为ci的硬币数量,由于xi*ci不能超过S,可以得出xi的取值范围[0,S/xi] 一个简单的解决方案是枚举每个硬币数量子集[x0,......如果满足上述约束条件,计算硬币数量总和并返回所有子集中的最小值 for循环每一个硬币,选择0个1面值硬币,判断当前选择情况*面值是否小于等于总面值S,进入下层递归选择硬币应该固定1面值,选择2面值,idxCoin...,cn-1]:可选的n枚硬币面额值 这个问题有一个最优的子结构性质,这是解决动态规划问题的关键。最优解可以从其子问题的最优解构造出来。如何将问题分解成子问题?...方法3、动态规划-自下而上: 采用自下而上的方式进行思考,仍定义F(i)为组成金额i所需最少的硬币数量,假设在计算F(i)之前,我们已经计算出F(0)-F(i-1)的答案,则F(i)对应的转移方程为

    54720

    2014年第五届Java B组蓝桥杯省赛真题

    其中许多方法都涉及无穷级数。 图1.png中所示,就是一种用连分数的形式表示的圆周率求法。 下面的程序实现了该求解方法。实际上数列的收敛对x的初始值 并不敏感。...对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的)。...随后,小明对每一个硬币分别进行一次 Q 操作。对第x行第y列的硬币进行 Q 操作的定义:将所有第 ix 行,第 jy 列的硬币进行翻转。 其中i和j为任意使操作可行的正整数,行号和列号都是从1开始。...当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上。 小明想知道最开始有多少枚硬币是反面朝上的。于是,他向他的好朋友小M寻求帮助。...聪明的小M告诉小明,只需要对所有硬币再进行一次Q操作,即可恢复到最开始的状态。然而小明很懒,不愿意照做。于是小明希望你给出他更好的方法。帮他计算出答案。

    66130

    传说中的贝叶斯统计到底有什么来头?

    要注意的是,虽然投掷的数量增加时,头在上的实际数量和头在上的预期数(抛掷数目的50%)之间的差异会逐渐增大。但是以抛掷的总数来说,头在上出现的比例接近0.5(一个公平的硬币)。...如果我们知道硬币是公平的,这就是观测到的头朝上的概率。 P(D)就是证据,这是因为通过在θ的所有可能的值,是θ的那些特定值加权求和(或积分)确定的数据的概率。...实际上,它们是相关的: ? ? 如果分发的平均值和标准偏差是已知的,那么有形状参数可以容易地计算出来。 从上面的图表可以推理出: 当没有抛掷的时候,我们认为硬币的公平性可以通过一条平滑的线来描绘。...4.3 后置信度分布 我们选择之前所相信的原因是为了获得一个β分布,这是因为当我们用一个近似函数相乘,后验分布产生类似于现有分配,这是很容易涉及到和理解的形式。 使用贝叶斯定理进行计算 ? ? ?...测试意义——频率论VS贝叶斯 无需使用到严格的数学结构,这部分将提供不同的频率论和贝叶斯方法预览。相关的简要概述,以及测试组哪种方法最可靠,和它们的显着性和差异性。

    73760

    蓝桥杯:矩阵翻硬币

    问题描述   小明先把硬币摆成了一个 n 行 m 列的矩阵。   随后,小明对每一个硬币分别进行一次 Q 操作。   ...对第x行第y列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进行翻转。   其中i和j为任意使操作可行的正整数,行号和列号都是从1开始。   ...当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上。   小明想知道最开始有多少枚硬币是反面朝上的。于是,他向他的好朋友小M寻求帮助。   ...聪明的小M告诉小明,只需要对所有硬币再进行一次Q操作,即可恢复到最开始的状态。然而小明很懒,不愿意照做。于是小明希望你给出他更好的方法。帮他计算出答案。...输出格式   输出一个正整数,表示最开始有多少枚硬币是反面朝上的。

    90180

    leetcode 322. 零钱兑换

    再次强调:新状态的值要参考的值以前计算出来的「有效」状态值。因此,不妨先假设凑不出来,因为求的是小,所以设置一个不可能的数。...for (int i = 0; i < amount+1; ++i) dp[i] = amount + 1; //凑出总价值为0,所需要的硬币数为0---这是最小的子问题,我们可以直接得出...----dp[i]=dp[i-coin]+1 //但是凑出dp[i]可能不止一种方法,可能在此之前已经求出一种凑出i的最少数,因此这里需要进行对比,选择所有可能中最小的 //因此最终得到...参考代码 2: 注意:由于 -1 是一个特殊的、有意义状态值(题目要求不能使用给出硬币面值凑出的时候,返回 -1),因此初值赋值为 -2,表示还未计算出结果。...因此,这个问题的背景是「完全背包」问题。 可以使用「完全背包」问题的解题思路(「0-1 背包」问题也是这个思路): 一个一个硬币去看,一点点扩大考虑的价值的范围(自底向上考虑问题的思想)。

    37610

    蓝桥杯:矩阵翻硬币

    问题描述   小明先把硬币摆成了一个 n 行 m 列的矩阵。   随后,小明对每一个硬币分别进行一次 Q 操作。   ...对第x行第y列的硬币进行 Q 操作的定义:将所有第 i*x 行,第 j*y 列的硬币进行翻转。   其中i和j为任意使操作可行的正整数,行号和列号都是从1开始。   ...当小明对所有硬币都进行了一次 Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上。   小明想知道最开始有多少枚硬币是反面朝上的。于是,他向他的好朋友小M寻求帮助。   ...聪明的小M告诉小明,只需要对所有硬币再进行一次Q操作,即可恢复到最开始的状态。然而小明很懒,不愿意照做。于是小明希望你给出他更好的方法。帮他计算出答案。...输出格式   输出一个正整数,表示最开始有多少枚硬币是反面朝上的。

    46350

    如何用Redis HyperLogLog统计日活月活?

    基数就是指一个集合中不同值的数目,比如 a, b, c, d 的基数就是 4,a, b, c, d, a 的基数还是 4。虽然 a 出现两次,只会被计算一次。...使用 Redis 统计集合的基数一般有三种方法,分别是使用 Redis 的 HashMap,BitMap 和 HyperLogLog。...所以 HyperLogLog 是否适合在比如统计日活月活此类的对精度要不不高的场景。 这是一个很惊人的结果,以如此小的内存来记录如此大数量级的数据基数。...比特串中,0 代表了抛硬币落地是反面,1 代表抛硬币落地是正面,如果一个数据最终被转化了 10010000,那么从低位往高位看,我们可以认为,这串比特串可以代表一次伯努利过程,首次出现 1 的位数为5,...Redis从稀疏存储转换到密集存储的条件是: 任意一个计数值从 32 变成 33,因为 VAL 指令已经无法容纳,它能表示的计数值最大为 32 稀疏存储占用的总字节数超过 3000 字节,这个阈值可以通过

    1.4K70

    深度 | 传说中的贝叶斯统计到底有什么来头?

    要注意的是,虽然投掷的数量增加时,头在上的实际数量和头在上的预期数(抛掷数目的50%)之间的差异会逐渐增大。但是以抛掷的总数来说,头在上出现的比例接近0.5(一个公平的硬币)。...如果我们知道硬币是公平的,这就是观测到的头朝上的概率。 P(D)就是证据,这是因为通过在θ的所有可能的值,是θ的那些特定值加权求和(或积分)确定的数据的概率。...实际上,它们是相关的: ? ? 如果分发的平均值和标准偏差是已知的,那么有形状参数可以容易地计算出来。 从上面的图表可以推理出: 当没有抛掷的时候,我们认为硬币的公平性可以通过一条平滑的线来描绘。...4.3 后置信度分布 我们选择之前所相信的原因是为了获得一个β分布,这是因为当我们用一个近似函数相乘,后验分布产生类似于现有分配,这是很容易涉及到和理解的形式。 使用贝叶斯定理进行计算 ? ? ?...测试意义——频率论VS贝叶斯 无需使用到严格的数学结构,这部分将提供不同的频率论和贝叶斯方法预览。相关的简要概述,以及测试组哪种方法最可靠,和它们的显着性和差异性。

    1.3K50

    JS算法之动态规划

    接下来用f(-1)和f(i)的结果计算出f(i+1) ---- 环形房屋偷盗 题目描述: ❝一条「环形街道」上有若干房屋。输入一个数组表示该条街道上的房屋内财产的数量。...❝也可以用「自下而上」的方法来计算状态转移方程,这个方程可以「看成一个表格的填充过程」,可以用一个表格来保存f(i,j)的计算结果。...「每种硬币可以使用任意多枚」 输入:coins = [1, 2, 5], t = 11 输出:3 11 = 5 + 5 + 1 。...这里每种面额的硬币可以使用「任意多次」,因此这个问题不是0-1背包问题,而是一个「无界背包问题」(也叫完全背包问题) 分析确定状态转移方程 分析和解决「完全背包问题」的思路与0-1背包问题的思路类似 「...i种硬币中选出0个硬币,使总额等于0 当i等于0且j大于0时,即用0种硬币凑出大于0的总额,这是不可能的 根据状态转移方程写代码 可以用不同的方法实现状态转移方程 转换成递归代码 将计算f(i,j)看成填充一个表格并用二重循环实现

    6.2K11

    加密市场指南:如何开发自己的加密数字货币-MasterDAX

    为了将一定数量的比特币发送到另一个钱包,您需要以下信息: 将资金发送到您的钱包的地址 您想要发送的加密数字货币数量 接收者的钱包的ID 每笔交易都使用唯一的机密私人密钥进行签名(不要将其与公共可用的钱包地址混淆...智能合约技术不仅可以实现金融部门的自动化,还可以实现法律,物流,咨询,房地产营销等领域的自动化。使用智能合同时,您不再需要第三方来确认您的行为的合法性 - 程序会做到这一点。...莱特币使用与比特币相同的代码;然而,还有一个不同的加密算法(比特币和Scrypt为Litecoins提供SHA-256)。莱特币代币的数量限制在8400万,比比特币多4倍。...莱特币使用CPU和视频卡的短期记忆和力量。 优点: 更容易和更有价值的采矿 更快,更便宜的交易 缺点: 莱特币是用比特币的一种模拟方法开发的,其算法不同,并没有像其他加密数字货币那样实现新的想法。...当然,这是大致的数据,我们可以在发现更多关于你的项目和你的生意的信息后告诉你确切的信息。

    2.6K50

    用户日活月活怎么统计 - Redis HyperLogLog 详解

    基数就是指一个集合中不同值的数目,比如 a, b, c, d 的基数就是 4,a, b, c, d, a 的基数还是 4。虽然 a 出现两次,只会被计算一次。...使用 Redis 统计集合的基数一般有三种方法,分别是使用 Redis 的 HashMap,BitMap 和 HyperLogLog。...所以 HyperLogLog 是否适合在比如统计日活月活此类的对精度要不不高的场景。 这是一个很惊人的结果,以如此小的内存来记录如此大数量级的数据基数。...比特串中,0 代表了抛硬币落地是反面,1 代表抛硬币落地是正面,如果一个数据最终被转化了 10010000,那么从低位往高位看,我们可以认为,这串比特串可以代表一次伯努利过程,首次出现 1 的位数为5,...Redis从稀疏存储转换到密集存储的条件是: 任意一个计数值从 32 变成 33,因为 VAL 指令已经无法容纳,它能表示的计数值最大为 32 稀疏存储占用的总字节数超过 3000 字节,这个阈值可以通过

    95010

    游戏开发中的物理介绍

    KinematicBody2D 提供碰撞检测但没有物理学的物体。所有运动和碰撞响应都必须用代码实现。 碰撞形状 物理物体可以将任意数量的Shape2D对象作为子对象。...物理过程回调 物理引擎可以产生多个线程以提高性能,因此它最多可以使用一个完整的帧来处理物理。 因此,对于当前帧,身体的状态变量(例如位置或线速度)的值可能不准确。...该方法将被传递一个delta 参数,该参数是一个浮点数,它等于自上一步以来经过的时间(以 秒为单位)。当使用默认的60 Hz物理更新速率时,通常等于0.01666…(但不总是如此,请参见下文)。...而是使用move_and_collide()ormove_and_slide()方法。这些方法沿着给定的矢量移动物体,如果检测到与另一个物体的碰撞,它将立即停止。...例如,使用以下代码制作一个可以在地面上行走(包括斜坡)并在站立在地面上时可以跳跃的角色: class Body : KinematicBody2D { private float _runSpeed

    1.2K30

    基于STC89C52的自动循迹小车项目

    系统整体结构如图1所示: 图1 系统整体结构图 本设计制作的自动循迹智能小车,要求能够在规定的直径为 0.6-0.9mm 的细铁丝跑道上自动循迹前进,同时显示小车行驶的距离和时间,并对跑道上任意放置的硬币进行检测并发出提示音...1.3 传感器循迹模块方案论证 本次设计需要小车对铁丝轨道进行探测并循迹,同时还需要检测硬币,可以采用 TI 公司 LDC1314 或LDC1000 任意一款传感器。...不同占空比的方波信号能对电机起到调速作用,这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上,这样,改变在始能端EN1 和EN2 上输入方波的占空比就能改变加在电机两端的电压大小...4.2 测试方法与测试结果分析 4.2.1小车跑完一圈的时间及铁丝循迹情况 将小车放在跑道任意位置,共测试五次,每次记录跑完一圈的时间及铁丝轨迹偏离小车垂直投影的距离, 记录数据见表 1。...从调试结果来看,后续可通过改进算法、优化程序等方法进一步提高小车的运行速度和测量值的精确度。

    1.3K40

    仓位管理:超越凯利公式,梦回华尔街!

    在这个新的f曲线中找到一个点,使GHPR的期望值最大化。 我们称这个点为“理想的f”。 ? ? ? 使用这种方法,我们看到曲线更加参差不齐。这是由于使用蒙特卡罗模拟时所涉及的固有随机性。...为了显示不同程度的相关性所产生的影响,我们将尝试三种不同的场景:两种不相关的硬币、两种正相关的硬币和两种负相关的硬币。...但是,使用这种方法只能产生相对的权重组合;杠杆作用没有考虑在内。因此,我们将优化程序分为两部分: 1、找出使投资组合夏普比率最大化的相对配置权重。...我们已经确定了适用于每种策略的相对权重,以便使夏普比率最大化,但按照计算方法应用它们可能会导致风险过高或收益过低。为了解决这个问题,我们可以使用优化程序的的结果获得加权投资组合的收益。...为了减轻这种情况,我们可以应用安全系数来扩大历史上最大回撤,从而减少所用的杠杆数量。我们还可以设定一个比我们认为必要时更低的最大回撤门槛;这也有助于有效降低最佳杠杆率。

    1.9K20

    用户日活月活怎么统计 - Redis HyperLogLog 详解

    基数就是指一个集合中不同值的数目,比如 a, b, c, d 的基数就是 4,a, b, c, d, a 的基数还是 4。虽然 a 出现两次,只会被计算一次。...当数据集的数量越来越大,内存消耗就无法忽视,甚至成了问题的关键。 使用 Redis 统计集合的基数一般有三种方法,分别是使用 Redis 的 HashMap,BitMap 和 HyperLogLog。...所以 HyperLogLog 是否适合在比如统计日活月活此类的对精度要不不高的场景。 这是一个很惊人的结果,以如此小的内存来记录如此大数量级的数据基数。...比特串中,0 代表了抛硬币落地是反面,1 代表抛硬币落地是正面,如果一个数据最终被转化了 10010000,那么从低位往高位看,我们可以认为,这串比特串可以代表一次伯努利过程,首次出现 1 的位数为5,...[示意图] Redis从稀疏存储转换到密集存储的条件是: 任意一个计数值从 32 变成 33,因为 VAL 指令已经无法容纳,它能表示的计数值最大为 32 稀疏存储占用的总字节数超过 3000 字节,这个阈值可以通过

    3.4K20

    LeetCode-322-零钱兑换

    # LeetCode-322-零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。...1、回溯: 用S代表总金额,ci是第i枚硬币的面值,xi是面值为ci的硬币数量,由于xi*ci不能超过S,可以得出xi的取值范围[0,S/xi] 一个简单的解决方案是枚举每个硬币数量子集[x0,......如果满足上述约束条件,计算硬币数量总和并返回所有子集中的最小值 for循环每一个硬币,选择0个1面值硬币,判断当前选择情况*面值是否小于等于总面值S,进入下层递归选择硬币应该固定1面值,选择2面值,idxCoin...,cn-1]:可选的n枚硬币面额值 这个问题有一个最优的子结构性质,这是解决动态规划问题的关键。最优解可以从其子问题的最优解构造出来。如何将问题分解成子问题?...方法3、动态规划-自下而上: 采用自下而上的方式进行思考,仍定义F(i)为组成金额i所需最少的硬币数量,假设在计算F(i)之前,我们已经计算出F(0)-F(i-1)的答案,则F(i)对应的转移方程为

    51410
    领券