上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页
摘要: Currency Exchange POJ - 1860 题意: 这题和Arbitrage POJ - 2240一个意思,区别在于本题给定了起始货币种类及具体数量,并且在兑换其他货币前需要扣一笔手续费,以及是双向边。 思路: 和Arbitrage POJ - 2240一样的Bellman-Ford解 阅读全文
posted @ 2020-07-30 17:22 StreamAzure 阅读(156) 评论(0) 推荐(0)
摘要: Arbitrage POJ - 2240 题意: 给出一系列货币汇率,问其中有无某种货币能在某些兑换操作后兑换回原货币,并且数量比开始时增多。 思路: 将货币视为节点,将兑换操作视为从一个节点到另一个节点的一条单向边。假定起点是1元,进行类似最短路的松弛操作后,再看起点是否多于1元即可。也就是判断是 阅读全文
posted @ 2020-07-30 17:16 StreamAzure 阅读(132) 评论(0) 推荐(0)
摘要: 0 or 1 HDU - 4370 题意 给定一个$n$阶矩阵$C_$,找到满足以下条件的仅由0和1构成的$n$阶矩阵$X_$: \(X_{12}+X_{13}+...+X_{1n}=1\) \(X_{1n}+X_{2n}+...+X_{n-1n}=1\) 对于$i$$(1<i<n)\(,满足\)\ 阅读全文
posted @ 2020-07-29 21:19 StreamAzure 阅读(133) 评论(0) 推荐(0)
摘要: 昂贵的聘礼 POJ - 1062 题意: 原题干说得不清不楚的……坑死我了。 探险家要得到物品$i$,方式有两种:一、花费金币$P[i]$直接买;二、先得到指定物品$X$,然后可以优惠价格$V$买得。 每个物品都有地位等级。 给定地位等级差距限制$M$,表示可行的交易序列中最高地位等级与最低地位等级 阅读全文
posted @ 2020-07-29 11:34 StreamAzure 阅读(100) 评论(0) 推荐(0)
摘要: Candies POJ - 3159 题意: 给班级小朋友分糖果,要求满足以下条件:给定$m$组关系$A,B,c$,表示$B$得到的糖果比$A$得到的不多于$c$个,即$candy[B]-candy[A]≤c$,求$1$号小朋友与$N$号小朋友糖果数之差的最大值。 思路: 线性差分约束。对式子$ca 阅读全文
posted @ 2020-07-28 23:11 StreamAzure 阅读(92) 评论(0) 推荐(0)
摘要: DNA sequence HDU - 1560 题意: 给定N个DNA序列(仅由ATCG构成),求能使得这N个序列均为其子序列的最短公共序列,输出这个最小的长度。 思路: IDA*,估价函数即N个序列中未匹配个数的最大值。(因为最理想情况是,当前所尝试的字母X加入公共序列之后,能同时与这N个序列匹配 阅读全文
posted @ 2020-07-25 12:39 StreamAzure 阅读(125) 评论(0) 推荐(0)
摘要: Escape HDU - 3533 题意: 小A要从$(0,0)\(逃到\)(n,m)$,他的精力值为$d$,每秒可以向东南西北四个方向走一格,或保持原地不动。但无论他是否移动,精力值每秒都会损失1点。路上他会遇到炮塔射击。给定$k$座炮塔的射击方向、射击间隔、子弹速度、坐标。第0秒小A开始逃跑,且 阅读全文
posted @ 2020-07-24 19:56 StreamAzure 阅读(114) 评论(0) 推荐(0)
摘要: HDU - 3567 Eight II 题意:八数码问题,给定初始状态与目标状态,输出字典序最小的移动路径和步数。 思路: 双向BFS: 以初始状态和目标状态为两个起点,同时出发,汇合时即答案 但需要注意,从初始状态出发的正向BFS所得路径必是字典序最小的(前提是方向遍历是按字典序从小到大);从目标 阅读全文
posted @ 2020-07-24 15:46 StreamAzure 阅读(162) 评论(0) 推荐(0)
摘要: Eight 题意:八数码问题 思路:反向BFS+康托展开 const int maxn = 362885; const int FAC[] = { 1,1,2,6,24,120,720,5040,40320,362880,3628800 }; int cantor(int* a) {//算出全排列对 阅读全文
posted @ 2020-07-23 23:30 StreamAzure 阅读(111) 评论(0) 推荐(0)
摘要: 模板整理 二分(返回第一个等于x的元素的下标) int found(int a[],int left,int right,int x) { while (left < right) { int mid = (right + left) >> 1; if (a[mid] < x) left = mid 阅读全文
posted @ 2020-06-06 23:45 StreamAzure 阅读(268) 评论(0) 推荐(1)
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页