无穷大

最少硬币问题

不想你离开。 提交于 2020-03-17 12:11:43
# include <iostream> # include <algorithm> # define INF 0x3f3f3f3f //0x3f3f3f3f的十进制是1061109567,可以作为无穷大使用而不致出现数据大于无穷大的情形。 using namespace std ; long long dp [ 100000 ] ; int w [ 100000 ] , t [ 100000 ] , m , n ; //w为面值 t为个数 m为凑的钱数 n为硬币的种类数 int main ( ) { memset ( dp , INF , sizeof ( dp ) ) ; //全部赋为最大是为了不影响比较。即只需要求最小的即可 dp [ 0 ] = 0 ; //与max中的全部赋为0一样。即只需要求最大的即可 cin >> n ; for ( int i = 1 ; i <= n ; i ++ ) cin >> w [ i ] >> t [ i ] ; cin >> m ; for ( int i = 1 ; i <= n ; i ++ ) for ( int j = 1 ; j <= t [ i ] ; j ++ ) for ( int k = m ; k >= w [ i ] ; k -- ) dp [ k ] = min ( dp [ k ] , dp [ k - w [

C# 中的 Infinity 和 NaN

守給你的承諾、 提交于 2020-03-01 03:48:18
C#语言中,对于 int,long 和 decimal类型的数,任何数除以 0 所得的结果是无穷大,不在int,long 和 decimal 类型的范围之内,所以计算 6/0 之类的表达式会出错。 但是,double 和 float 类型实际上有一个可以表示无穷大的特殊值: 5.0/0.0 = Infinity (无穷大),这个规则唯一的例外是 0.0/0.0 = NaN (Not a Number)。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Infinity_NaN { class Program { static void Main( string [] args) { Console.WriteLine( "5 / 2 = {0}" , 5 / 2); // 2 Console.WriteLine( "5.0 / 2.0 = {0}" , 5.0 / 2.0); // 2.5 Console.WriteLine( "5.0 / 2 = {0}" , 5.0 / 2); // 2.5 Console.WriteLine( "5 / 2.0 = {0}" , 5 / 2.0); // 2.5 Console.WriteLine(

C语言调试输出变量为-1.#IND00 -1.#INF00 1.#INF00

我是研究僧i 提交于 2020-01-19 11:59:35
-1.#IND00:程序中有不合法的计算,比如对一个负数开根号,或者求log(-1)这些等等; -1.#INF00:计算结果为负无穷,比如求-1/0; 1.#INF00:计算结果为正无穷,比如1/0; 在math.h头文件中,可以用isnan()函数(is not a number,是否不是一个数字)判断一个数是否是合法计算结果, 返回true表示计算结果非法,false表示合法。也可以用isinf()函数(is infinite,是否是无穷大)判断一个数是否是无穷大,返回true表示计算结果是无穷大,false表示不是无穷大。 # include <stdio.h> # include "math.h" int main ( ) { double x = 0 ; double y = - 1 / x ; //double y = log(double(-1)); if ( isnan ( y ) ) //如果计算非法 printf ( "not a number\n" ) ; else if ( isinf ( y ) ) //如果计算结果为无穷大 printf ( "infinite\n" ) ; else //计算结果正常 printf ( "%lf\n" , y ) ; return 0 ; } 来源: CSDN 作者: 故里草木深 链接: https://blog

CSP复习与模板

自古美人都是妖i 提交于 2019-12-04 13:45:25
P3366 【模板】最小生成树 Kruskal 算法因为只与边相关,则适合求稀疏图的最小生成树。而 Prim 算法因为只与顶点有关,所以适合求稠密图的最小生成树。 Prim 是以更新过的节点的连边找最小值,Kruskal 是直接将边排序。两者其实都是运用贪心的思路。 Kruskal Kruskal 的时间复杂度为 \(O(e\log e)\) ,只和边有关系。 #include<cstdio> #include<algorithm> #define reg register using namespace std; const int N=5005,M=200005; struct Edge{ int u,v,w; bool operator<(const Edge x){ return w<x.w; } }e[M]; int fa[N],ans,n,m,tot; int father(int x){ return fa[x]==x?x:fa[x]=father(fa[x]); } int main(){ scanf("%d%d",&n,&m); for(reg int i=1;i<=n;++i)fa[i]=i; for(reg int i=1;i<=m;++i) scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); sort(e+1,e+m+1);

python的特殊数字类型(无穷大、无穷小等)

匿名 (未验证) 提交于 2019-12-02 22:51:08
float('inf') 表示正无穷 -float('inf') 或 float('-inf') 表示负无穷 其中,inf 均可以写成 Inf 起步 python中整型不用担心溢出,因为python理论上可以表示无限大的整数,直到把内存挤爆。而无穷大在编程中常常需要的。比如,从一组数字中筛选出最小的数字。一般使用一个临时变量用于存储最后结果,变量去逐个比较和不断地更新。而这临时变量一般要初始无穷大或者去第一个元素的值。 正无穷大与负无穷大 python中并没有特殊的语法来表示这些值,但是可以通过 float() 来创建它们: >>> a = float("inf") >>> b = float("-inf") >>> a inf >>> b -inf 为了测试这些值的存在,使用 math.isinf() 进行判断: >>> import math >>> math.isinf(a) True >>> math.isinf(b) True 无穷大数在执行数学计算的时候会传播 这个就类似于数学中讲述的,无穷大加上一个常数还是无穷大,无穷大与无穷大相等: >>> a = float('inf') >>> a + 45 inf >>> a * 10 inf >>> 10 / a 0.0 >>> float("inf") == float("inf") True

算法概念

旧城冷巷雨未停 提交于 2019-12-01 20:10:51
一、概念 1、原操作 2、频度 3、时间复杂度 n趋于无穷大时候,Tn比上On是一个常数,变化趋势一样;(On是Tn的最高次幂); 4、时间复杂度表示 来源: https://www.cnblogs.com/wmqiang/p/11716073.html

将INF设置为0x3f3f3f3f

南笙酒味 提交于 2019-11-30 06:19:27
在算法竞赛中,我们常常需要用到一个“无穷大”的值,对于我来说,大多数时间我会根据具体问题取一个99999999之类的数(显得很不专业啊!) 在网上看别人代码的时候,经常会看到他们把INF设为0x7fffffff,奇怪为什么设一个这么奇怪的十六进制数,一查才知道,因为这是32-bit int的最大值。如果这个无穷大只用于一般的比较(比如求最小值时min变量的初值),那么0x7fffffff确实是一个完美的选择。 但是更多情况下,0x7fffffff并不是一个好的选择,比如在最短路径算法中,我们使用松弛操作: if (d[u]+w[u][v]<d[v]) d[v]=d[u]+w[u][v]; 如果u,v之间没有边,那么w[u][v]=INF,如果我们的INF取0x7fffffff,那么d[u]+w[u][v]会溢出而变成负数,我们的松弛操作便出错了! 准确来说,0x7fffffff不能满足“无穷大加一个有穷的数依然是无穷大”这个条件,它会变成了一个很小的负数。 更进一步的,如果有一个数能够满足“无穷大加无穷大依然是无穷大”,那么就更好了! 前阵子无意中看到了一个不一样的取值,INF=0x3f3f3f3f,这时我又郁闷了,这个值又代表的是什么?于是我去寻找答案,发现这个值的设置真的很精妙! 0x3f3f3f3f的十进制是1061109567,是10^9级别的

无穷小与无穷大

怎甘沉沦 提交于 2019-11-28 00:48:42
无穷小 定义 如果函数 f ( x ) f(x) f ( x ) 当 x → x 0 x \rightarrow x_0 x → x 0 ​ (或 x → ∞ x \rightarrow \infty x → ∞ )时的极限为零,那么称函数 f ( x ) f(x) f ( x ) 为当 x → x 0 x \rightarrow x_0 x → x 0 ​ (或 x → ∞ x \rightarrow \infty x → ∞ )时的无穷小。 注意: (1)无穷小不可以和很小的量混为一谈,无穷小量不是指量的大小,而是 指量的变化趋势 (以零为极限); (2)无穷小是这样的函数:在 x → x 0 x \rightarrow x_0 x → x 0 ​ (或 x → ∞ x \rightarrow \infty x → ∞ )过程中,函数的绝对值能小于任意给定的正数 ϵ \epsilon ϵ 。而很小的数如百万分之一,就不能小于任意给定的正数 ϵ \epsilon ϵ 。例如取 ϵ \epsilon ϵ 等于千万分之一,则百万分之一就不能小于这个给定的 ϵ \epsilon ϵ 。但零是可以作为无穷小的唯一常数,因为如果 f ( x ) ≡ 0 f(x) \equiv 0 f ( x ) ≡ 0 ,那么对于任意给定的正数 ϵ \epsilon ϵ ,总有 ∣ f ( x ) ∣ <