- 博客(45)
- 资源 (3)
- 收藏
- 关注
原创 POJ1651 Codevs1017 乘积最大 ---2000年NOIP全国联赛提高组 dp
POJ1651 Codevs1017 乘积最大 —2000年NOIP全国联赛提高组预处理出所有数字组合。 dp[i][k] 表示前 i 个数字已经用了 k 个 乘号。 状态转移方程:dp[i][k] = max(dp[i][k], dp[j][k-1]*mul[j+1][i]); 第i个数字用了k个乘号的状态 可以从 小于i 的j 用了k-1个乘号的状态转移而来。#include <cstd
2016-10-31 19:52:37 397
原创 Codevs 1169 传纸条/1043 方格取数 2008/2000年NOIP全国联赛提高组 多线程dp
1169 传纸条 / 1043 方格取数2条路线一起走。 dp[i][j][k][l] 表示 第一个路线走到 i, j 第二个路线走到 k, l; 由于不能重复走, 所以当 2 个路线的点重合 只加一个maps[i][j];传纸条#include <cstdio>#include <cstring>#include <iostream>#include <cstdlib>using na
2016-10-30 20:17:32 366
原创 Codevs 2980 买帽子 dp(LIS)
Codevs 2980 买帽子对于一个字符串的最长对称子序列,就是它和它反串的最长公共子序列我看了DQS的题解代码:(char 数组实现)#include <cstdio>#include <cstring>#include <iostream>#include <cstdlib>#include <algorithm>using namespace std;#define MAXLEN
2016-10-30 15:33:16 381
原创 Codevs 1058 合唱队形 ---2004年NOIP全国联赛提高组 dp
Codevs 1058 合唱队形 —2004年NOIP全国联赛提高组枚举中间的最高点跑最长上升和最长下降子序列。注意,单调的数据答案是 0。真是一个好题, 数据在注释里。#include <cstdio>#include <cstring>#include <iostream>#include <cstdlib>#include <algorithm>using namespace st
2016-10-30 10:48:03 452
原创 Codves 1044 拦截导弹 ---1999年NOIP全国联赛提高组 dp(n2 || nlogn)
Codves 1044 拦截导弹 —1999年NOIP全国联赛提高组一遍最长不上升子序列, 一遍严格上升子序列。n方代码:#include <cstdio>#include <cstring>#include <iostream>#include <cstdlib>using namespace std;#define MAXN (20+2)int a[MAXN], dp[MAXN];i
2016-10-30 10:15:07 763 2
原创 Codevs 2188 最长上升子序列 dp
Codevs 2188 最长上升子序列对不合法的数字不作处理。continue#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>using namespace std;#define MAXN (200000+10)int a[MAXN], dp[MAXN];#define INF (1e9)in
2016-10-30 08:24:37 298
原创 Codevs 5314 蜗牛鲍勃找房子1——出发!
Codevs 5314 蜗牛鲍勃找房子1——出发!评测的时候不小心看见这个题了, 就做一下,唯一需要注意的地方是如果剩下的距离不够1分钟的速度,也按1分钟计算。#include <cstdio>#include <cstring>#include <iostream>#include <cstdlib>using namespace std;#define T (1440)int main(
2016-10-29 07:48:58 466
原创 Codevs 3955 最长严格上升子序列(加强版) dp (nlogn做法)
Codevs 3955 最长严格上升子序列(加强版) 对于同一个上升子序列, 最后一个元素越小,长度才可能越长。具体过程每次替换后输出一下 dp 数组 , 一目了然。#include <cstdio>#include <queue>#include <cstring>#include <iostream>#include <cstdlib>using namespace std;#defi
2016-10-28 19:25:03 358
原创 Codevs 2598 编辑距离问题 dp
Codevs 2598 编辑距离问题 if(i == 0) dp[i][j] = j;if(j == 0) dp[i][j] = i;if(s1[i] == s2[j]) dp[i][j] = dp[i-1][j-1];else dp[i][j] = max{dp[i-1][j] + 1 // 删除 s1[i]; dp[i][j-1] + 1 // 删除
2016-10-28 16:15:22 327
原创 Codevs 1102 采药 01背包模板
#include <cstdio>#include <cstring>#include <queue>#include <cstdlib>#include <iostream>using namespace std;#define MAXN (100+10)#define MAXT (1000+10)int c[MAXN], w[MAXN];int dp[MAXN][MAXT];in
2016-10-28 10:20:34 392
原创 Codevs 1048 石子归并 区间DP
Codevs 1048 石子归并#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;#define MAXN (100+10)int sum[MAXN];int dp[MAXN][MAXN];#define min(u,v) (u<v?u:v)int main
2016-10-28 08:08:33 392
原创 Codevs 2152 滑雪 记忆化搜索DP
Codevs 2152 滑雪 dp[i][j] 为从 i, j 开始走能走多长距离。代码#include <iostream>#include <cstdio>#include <queue>#include <cstring>using namespace std;#define MAXN (100+10)const int dx[] = {0,1,0,-1,0};const int
2016-10-27 20:06:46 327
原创 Codevs 1535 封锁阳光大学 dfs || bfs
Codevs 1535 封锁阳光大学根据题意将相邻的点染色, 如果在染色过程中碰到下一个点跟自己同色的情况就 不合法;把图染完色后,记录一下每种颜色的数量,取最小值, 如果是森林, 最后的答案是就每一个分图 的 min 相加。DFS#include <cstdio>#include <cstring>#include <queue>#include <iostream>using names
2016-10-27 19:50:01 430
原创 洛谷 P1372 又是毕业季I 数论
洛谷 P1372 又是毕业季I话说,我吃惊了。设 p 为我们的答案 那么 我们选的数肯定最大公约数都是 p 也就是说 p* 1 ,p*2, p *3, p *k; 所以 p*k <= n p <= [n/k]黑人??? .jpg#include <cstdio>int main(){ int n, k; scanf("%d%d", &n, &k); printf(
2016-10-26 20:50:54 544
原创 Codevs 1079 回家 最短路 spfa || dijkstra
Codevs 1079 回家 最短路直接利用 ASCII 码把字母转化为顶点跑最短路就可以了, 如果嫌我的方法浪费了部分空间 可以令 把所有的 ASCII 都-‘A’;spfa#include <iostream>#include <cstdio>#include <queue>#include <cstring>#define MAX_V 200#define MAX_E (10000
2016-10-24 19:19:49 383
原创 最短路模板 floyd+dijkstra+spfa
flyodvoid flyod(){ for(int k = 1; k <= V; k ++) for(int i = 1; i <= V; i ++) for(int j = 1; j <= V; j ++) dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);}di
2016-10-24 18:25:12 432
原创 洛谷 P1290 欧几里德的游戏 黄金分割
洛谷 P1290 欧几里德的游戏感觉智商被碾压……不严谨的证明: 设 G 为黄金分割比 0.6180…… 假设 a < b 则, 若 a/b <= G, 则先手赢, 反之, 后手赢。Fib: 1/2 == 0.5 ; 2/3 == 0.67 ; 3/5 == 0.6; 5/8 == 0.625 ……可以发现 严格在 0.618 上下浮动。 显然, 谁的回合内先出现 1 谁赢。 2/3
2016-10-21 20:00:46 648
原创 noi openjudge/1.9 10:找最大数序列
noi openjudge/1.9 10:找最大数序列一直搞输入啊搞输入搞不出来,搜题解,然后突然发现可以这样输入, 简单多了, 语言基础没学好?代码:#include <cstdio>#include <queue>#include <cstring>#include <iostream>#include <vector>#include <cctype>using namespace
2016-10-21 16:44:25 1996
原创 NOI OpenJudge 2971:抓住那头牛 BFS
NOI OpenJudge 2971:抓住那头牛无脑bfs?还不懂为什么我之前的方法不行……noijudge 看不到 部分数据……#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;int N, K;bool vis[100010 << 1];struct T{
2016-10-20 06:50:05 944
转载 欧拉函数公式及其证明
以下转自 百度文库炒鸡好QAQ欧拉函数 : 欧拉函数是数论中很重要的一个函数,欧拉函数是指:对于一个正整数 n ,小于 n 且和 n 互质的正整数(包括 1)的个数,记作 φ(n) 。 完全余数集合: 定义小于 n 且和 n 互质的数构成的集合为 Zn ,称呼这个集合为 n 的完全余数集合。 显然 |Zn| =φ(n) 。有关性质: 对于素数 p ,φ(p) = p -1 。 对于两个不同素
2016-10-19 19:49:14 6254
原创 POJ 1006 Biorhythms 生理周期 中国剩余定理
链接 : POJ 1006 Biorhythms 中文: POJ 1006 生理周期我通过 ζёСяêτ - 小優YoU 的博客学习, 不再赘述。我的代码:#include <cstdio>#include <cstring>#include <iostream>#include <queue>using namespace std;int main(){ int p, e, i
2016-10-19 19:39:34 525
原创 Codevs 1313 质因数分解
代码:#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <cmath>#include <ctime>#define X CLOCKS_PER_SECusing namespace std;typedef long long LL;bool Judge(LL x){
2016-10-19 17:19:15 554
原创 Codevs 1792 分解质因数
不知道还有没有更优的算法……虽然我的能过…… 求教QAQ。代码:#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <cmath>#include <ctime>#define X CLOCKS_PER_SECusing namespace std;typedef long l
2016-10-19 16:25:29 387
转载 扩展欧几里德算法详解
转载自: 扩展欧几里德算法详解 作者:zhj5chengfeng%%% 以下为原文扩展欧几里德算法 谁是欧几里德?自己百度去 先介绍什么叫做欧几里德算法 有两个数 a b,现在,我们要求 a b 的最大公约数,怎么求?枚举他们的因子?不现实,当 a b 很大的时候,枚举显得那么的naïve ,那怎么做? 欧几里德有个十分又用的定理: gcd(a, b) =
2016-10-19 16:16:07 315
原创 扩展欧几里得
保存推导部分:gcd = b*x1 + (a-(a/b)*b)*y1 = b*x1 + a*y1 – (a/b)*b*y1 = a*y1 + b*(x1 – a/b*y1)代码:#include <cstdio>#include <cstring>#include <iostream>#include <queue>using namespace std;int exgcd(
2016-10-19 07:14:47 281
原创 POJ 青蛙的约会 exgcd
不想搞数论啊啊啊QAQ贴学长博客题解 : 【poj1061】青蛙的约会 exgcd解同余方程我的代码:#include <iostream>#include <cstdio>#include <queue>#include <cstring>#include <cmath>using namespace std;typedef long long LL;LL exgcd(LL a, LL
2016-10-19 07:01:48 2235
原创 POJ 2157 Maze DFS
POJ 2157 Maze炒鸡好的一道搜索题, 然而我并不会, 所以看得是 黄学长博客 才会做的。题意:给你一张图, n, m。由字符组成,’S’ 是起点, ‘G’ 是终点, ‘X’ 代表墙, ‘A’, ‘B’, ‘C’, ‘D’, ‘E’ 是门, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’ 是门的钥匙。其中钥匙数至少为1个,收集地图上全部 ‘a’ 才可能 开启 ‘A’, 其他也一样。输出能否从
2016-10-16 11:35:14 369
原创 Codevs 3223 4883 素数密度 2945 计算素数 埃氏筛 || 线性筛
=3223 4883 =2945 计算素数居然被卡了这么长时间 long long 的正确使用……这个题目就是先 筛出 2到b√2 到\sqrt{b} 内的素数, 然后用这些素数埃氏筛法筛 a 到 b 区间内的数。2945计算素数的话只是数据范围稍大代码#include <iostream>#include <cstdio>#include <queue>#include <cstrin
2016-10-16 07:21:27 577 1
原创 线性筛
强行草率的放上代码:#include <iostream>#include <cstdio>#include <queue>#include <cstring>using namespace std;const int MAXN = 10000000;int n, cnt = 0;int prime[MAXN];bool vis[MAXN];void solve(){ for
2016-10-14 20:44:55 287
原创 POJ 1222 EXTENDED LIGHTS OUT (noi OpenJudge 1813)枚举
双倍经验POJ 1222 EXTENDED LIGHTS OUT (noi OpenJudge 1813)中文题面易知, 确定了第一行的状态就可以知道一下所有行的状态, 因为 完全可以通过更改 i+1 行 使 i 行 合法, 所以我们只要枚举一下 第一行的所有可能 更改开关的方案, 往下地推, 看看到了最后一行 是不是合法即可。这里用到了二进制枚举。代码:#include <iostream>
2016-10-14 10:22:54 424
原创 二进制子集生成
方法因为二进制是由0/1 组成的一串数字, 我们可以把 长度为 n 的二进制位中位为 1 的所有位置视为 序列 n 的所有选择的元素位置, 如 1001, 表示长度为 4 的序列中的 第1个元素和第 4 个元素。所以说我们只要遍历一遍 2^n 内的所有二进制数, 就能获得长度为 n 中有 1 的二进制数的所有可能性。比如, 我们求 n == 3 的所有子集, 2^3 == 8(10) == 1000
2016-10-13 20:56:11 626
原创 Codevs 1018 单词接龙 DFS --2000年NOIP全国联赛普及组NOIP全国联赛提高组
Codevs 1018 单词接龙 DFS 深搜。
2016-10-12 15:26:00 1182 2
原创 Codves 3145 4412 4835 汉诺塔 递归
思路: 1、将 n-1 从 A 移到 B 上; 2、将 n-1 从 B 移到 C 上。步数: 根据 F(x) = 2*F(x-1) + 1, F(1) = 1;递推。代码
2016-10-10 16:55:39 448 4
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人