自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(148)
  • 资源 (3)
  • 收藏
  • 关注

原创 Denoising Variational Auto-Encoder 降噪变分自编码器

降噪变分自编码器(Denoising VAE),是将Denoising Criterion和VAE结合在一起的一种自编码器。大致来说,对输入按一个分布加入噪声,然后将扰乱后的样本作为的VAE的输入,并令VAE重构没有加入噪声的样本。 回顾VAE,对于所有样本,我们希望最大化其对数似然,即L被称为是变分下界,最大化logp(x)可以通过最大化变分下界实现,这里为了...

2020-01-02 15:39:26 3549 3

原创 Variational Auto-Encoder (VAE)论文阅读与公式推导

1.问题描述给定一个数据集,假设其满足样本间独立同分布。本质上,我们希望得到关于该数据集的真实的概率分布p(x),虽然有一些方法能够直接估计p(x)中某一点的概率(例如核密度估计、近邻方法),但这些方法一方面准确性较差,并且随着样本维度的升高,对样本数量的需求也是指数增加的。简单来说,我们多数情况下无法知道p(x)。 那么换一个思路,假设每个样本是由一组潜在的因素决定,这些因素...

2019-12-28 11:00:17 1753

原创 codeforce 609 Div2

Problem A给定一个数,求两个合数,差为这个数。构造方法有很多。#include <iostream>#include <algorithm>#include <string>#include <vector>#include <map>#include <cstring>#include <...

2019-12-23 10:14:03 172

原创 多目标优化问题中常见分解方法的理解

作为刚上研一提前来给老师当苦力的小菜鸟,第一次学习MOEAD算法的时候,对其中介绍的分解方法一脸懵*,上网查了不少资料,很难查到详细的解释(好吧,可能我查的姿势不对),完全不理解这些分割方法所给出的表达式的意义,索性搁置了小半个月。这里必须要感谢一下Chithon的http://blog.csdn.net/qithon/article/details/72885053#comments这篇博客

2017-07-25 10:43:23 41192 22

原创 Codeforces 577B

题意:给出n和m,然后给出n个数ai,让你判断从这n个数中取一个非空集合,集合中数的和对m取模为零,回答这的非空集合是否存在。范围:n 鸽巢原理:n+1个鸽子飞到n个鸽巢里,其中必有一个鸽巢有至少两只鸽子。那么根据这一题可知,分情况:当n>m时,求前缀和后,得到n个前缀和,又因为他们mod m的余数只有m个,必然存在一l和r使得suml mod m==sumr mod

2015-09-14 13:05:51 475

原创 关于分块问题的一些感想

看了bestcoder的一道题目,真心发现分块思想是一个很神奇的东西,我们所熟知的线段树其实就是分块思想的一种体现,而分块并不一定要按照线段树一样的进行二分,也可以对整个集合划分成若干段,然后利用预处理的每段信息进行查询操作,常见的就是划分成sqrt(n)段,见到有大神称之为“根号n法”,感觉挺贴切的,另外在看bc的题解的时候还学会了一种比较不错的hash方法,代码来自huanzhizun

2015-07-28 10:37:44 389

原创 3xN骨牌问题

这周的hihocoder的题目,感觉挺经典的,就贴上来吧。显然对于这种题目,显然需要求出递推关系后用矩阵乘法优化,详细的内容可以直接看hiho给的提示:3xN骨牌问题。代码如下:#include #define MOD 12357void p(int a[][8],int b[][8]){ int t[8][8]={0}; for(int i=0;i<8;i++) for(i

2015-04-20 19:15:20 449

原创 三分求点到二次函数最小值

三分的思想不再赘述,网上多得是,主要是三分是点的选择是个小trick,另外还有double类型变量判相等的条件。#include #include const double eps=0.00000001;double getf(double a,double b,double c,double x,double x0,double y0){ double t=a*x*x+b*x+c;

2015-04-04 23:43:30 735

原创 UVA 10673

还整什么求解模线性方程,题目比较特殊,并且可以输出任何一组解,那么看了大神的题解之后恍然大悟#include int main(){ int T; scanf("%d",&T); while(T--){ long long n,m; scanf("%I64d%I64d",&n,&m); if(n%m) printf("%I64d %I64d\n",-n,n);

2015-03-30 20:23:48 395

原创 UVA 106 (勾股数)

#include #include bool is[1000010];int gcd(int a,int b){ int r=1; while(r){ r=a%b; a=b;b=r; } return a;}int main(){ int n; while(scanf("%d",&n)!=EOF){ int ans1=0,ans2=0; for(int i

2015-03-30 20:22:09 485

原创 二分答案

hihocoder上的题目,之前codeforces又一次也用到过这种方法,直接对答案进行二分,并且根据题意验证。当对一道题目毫无头绪的时候,可以试试这种神奇的方法。#include #include #include #include #include using namespace std;int n,m,k,t,size=0;int vis[10010]={false};

2015-03-22 16:04:54 412

原创 hdu 5191

题意:给出n个高度不同的积木堆,求最少移动多少个可以得到W个连续的长度相等切位H的堆。  思路:枚举区间即可。比较坑的是G++的输入必须用输入挂才可以过,否则会超时。#include int h[200010];long long n,W,H,ans;long long mmin(long long a,long long b){ return a>b?b:a;}long l

2015-03-22 16:03:43 441

原创 Codeforces 296C

题目大意:给定长宽的矩形,执行n次操作,每次操作分两种类型,1.H型,水平切割,2.V型,竖直切割。对于每次切割,给定切割点,求出每次切割后最大的矩形面积  思路:直接用STL中的set即可。#include #include #include using namespace std;set x,y;// 记录长宽上各个切点set lx,ly;// 记录长宽上各个线段长度int

2015-03-18 15:25:41 341

原创 Codeforces 296 A

题目大意:给定长宽分别为a和b的矩形,每次折叠后截取折叠部分,问最终折成正方形要多少步。/*若a>b,可知至少需要折叠a/b次,此时a剩下的长度为a%b,然后调整a,b即可,注意若b|a,则显然最终结果多记了一次*/#include #include using namespace std;int main(){ long long a,b; scanf("%I64d%I64d"

2015-03-18 14:18:58 305

原创 Codeforces 296 B

题目大意:给定两个字符串,长度相等,定义距离为不同字符的个数,问选择s中任意两个字符,调换位置后能得出的最小距离。#include #include using namespace std;char s[200010],t[200010];bool is[26][26]={false};int ps[26][26];int main(){ int n,ans=0; scanf

2015-03-18 14:14:22 399

原创 COdeforces 396B

题目大意:给出一个n,ans = ∑(2≤i≤n)1/(v(i)*u(i)), v(i)为不大于i的最大素数,u(i)为大于i的最小素数, 求ans,输出以分式形式。  思路:可知1/(a*b)=(1/a-1/b)*(1/(b-a)),假设a1/(a*b)的数量刚好有b-a个,那么单独求出后半部分即可。ans=1/2-1/v(n)+(n-v(n)+1)/(v(n)*u(n))#incl

2015-03-16 21:39:19 429

原创 Coderforces 396A

组合数学,给出n个数,ai,然后取这n个数的积为m,计算将m分解成n个因子,问有多少种有序因子序列。  需要知道几个基本知识,c(n,m)=c(n-1,m-1)+c(n-1,m),讲n个物品分k份,每份至少一个物品,c(n-1,k-1)。#include #include #include using namespace std;map h;const int mod=10000

2015-03-16 21:03:37 382

原创 poj 1015

#include #include int dp[210][25][420],sd[210][25][410]={0},sp[210][25][410]={0},path[25];int p[210],d[210],s[210],r[210];int ab(int i){ return i>0?i:-i;}int main(){ //freopen("in.txt","r",s

2015-03-13 15:57:06 411

原创 无序数组的二分查找

对于有序数组,我们只需要简单的二分查找就可以了,但是对于无序数组,我们可以先排序在二分,但还有一种技巧就是结合快排的思想,即每次选择一个关键字,先将比他大的数放在其右边,比他小的数放在其左边,然后比较他和要查找的数的关系,并选择下次迭代的区间。#include int e[1000010];int main(){ int n,k,i; scanf("%d%d",&n,&k); fo

2015-03-09 13:14:22 3761 3

原创 二分图最大匹配——匈牙利算法

其实就是不断查询增广路,利用增广路中非匹配边比匹配边多一得性质优化匹配。  伪代码:Function FindPath(u) For v∈u的相邻节点 标记v已经查询过 If v未匹配 or FindPath(v的匹配的点) Then 更改u的匹配为v Return Ture E

2015-03-08 10:38:23 433

原创 二分图判定

题意:给定顶点数和边数的无向图,判定其是否为二分图。  思路:首先需要知道一个图是二分图并不代表其实联通的,那么遍历每个顶点,对其进行染色,并处理与之相邻的顶点,若无色,则染成与之相反的颜色,若有,则判断是否同色,若同色则不是二分图。所有顶点成功染色即为二分图。#include #include int c[10010];struct EDGE{ int to; struct E

2015-03-07 20:24:18 397

原创 UVA 10564

题意:给定沙漏,每个格子对应一个数,求给定路径权值和的路径条数即最小起点,最小字典序的路径。  思路:有数据范围可定义状态dp(i,j,k)表示第i行第j个格子到达终点的权值和为k的路径条数,那么        对于倒三角:dp(i,j,k)=dp(i+1,j-1,k-e[i][j])+dp(i+1,j,k-e[i][j]);        对于正三角:dp(i,j,k)=dp(i+1

2015-02-01 11:06:18 487

原创 UVA 10635

题意:给定两个序列,每个序列中的数字范围值1~n^2(2  思路:这个一开始先想到了空间复杂度需要优化,然后发现对于状态d(i,j)表示第一个序列的前i位和第二个序列的前j位的LCS可以用滚动数组优化空间为O(n),时间复杂度还是O(n^2),虽然用处不大,还是留作纪念。for(int i=1;i>a[i];for(int i=1;i>b[i];for(int i=1;i<=p;i++

2015-01-31 11:05:26 372

原创 UVA 10911

题意:求最小的组合代价。  思路:状态压缩,因为最多只有16个人,且只需考虑当前状态下是否在集合中,所以状态dp(i)表示状态为i时的最小代价,转移时必须确保枚举的两个人均不在集合中,还有一点需要注意的是初始化。#include #include #include #include using namespace std;double d[20][20],dp[132000];

2015-01-29 00:07:48 496

原创 UVA 11151

题意:求最长回文子序列。  思路:状态dp(i,j)表示从i到j的最长回文子序列长度,那么    dp(i,j)=dp(i+1,j-1)+2,str[i]==str[j]    dp(i,j)=max(dp(i+1,j),dp(i,j-1)),str[i]!=str[j]#include #include #include #include using namespace

2015-01-28 14:03:07 354

原创 UVA 10891

题意:给定一组数,每一次选手可从左右两端任意一段选取连续的任意个数,至少选一个,甲先手,保证每次最优,则最后甲比乙得分多多少。  思路:和两端取一个数字的做法差不多,即dp(i,j)表示对于从i到j的序列,先手可得得最大分,那么dp(i,j)=sum(i,j)-min{min{dp(i,k)}  (k=i~j-1),min{dp(k,j)  (k=i+1~j)}},注意再求最小值是因为可以把整

2015-01-28 11:59:36 345

原创 UVA 10310

题意:求面值n用k个金币组成的方法数。  思路:一开始直接想到设状态dp(i,j)为面值i用j个硬币表示的方法数,但最后发现没办法转移,看到有人说用无限背包,可能是我理解不够深入,交了几次都WA了,最后查了写资料,发现需要用到一个结论,即面值i用j个金币组成的方法数等于面值i用不超过j的面值的金币组成的方法数。关于证明可以百度,用到了ferrers图像的性质,这样一来状态dp(i,j)表示面值

2015-01-27 23:48:44 413

原创 UVA 10029

题意:给定一个字典,找出连续变换的最长路径。  思路:我只想说LIS不超时啊,只需要预处理求出每个字符串长度就ok了。#include #include #include #include using namespace std;char e[25010][17];int dp[25010]={0},l[25010];bool ji(int pi,int pj,int li,

2015-01-27 11:32:27 436

原创 UVA 10453

题意:给定一个字符串,可向任意位置添加字符以构成回文串,求最少添加字符数和处理后的字符串。  思路:定义状态dp(i,j)为原串第i个字符到第j个字符够成回文的最小添加数,则       dp(i,j)=dp(i+1,j-1),(str[i]==str[j])       dp(i,j)=min{dp(i+1,j),dp(i,j-1)}+1,(str[i]!=str[j])  相等

2015-01-24 11:24:46 336

原创 UVA 10201

题意:过n个加油站,没站油价不等,问达到目的地的最小花费,其实100L油,到达终点至少100L油。  设状态dp(i,j)表示在第i个加油站有jL油的最小花费,初始dp(i,j)=min{dp(i,j),dp(i-1,j+dis(i,i-1))},然后根据油价尝试更新dp(i,k),(k>j)。  小心数据所给加油站并不是都在起点到终点的区间内。#include #include

2015-01-24 11:04:37 380

原创 UVA 10154

题意:有n个乌龟,每个乌龟又一个重量和一个力量,叠罗汉,每个乌龟受重不大于其力量减去自身重量,问最高能叠多少层。  思路:存在一个最优解使得乌龟的力量从上到下是递增的,证明是比较简单的,对于任何一个最优解,假设相邻两层的重量为w[i-1]和w[i],力量为s[i-1]和s[i],并且s[i-1]>s[i],上方的最大重量为s[i]-w[i]-w[i-1],此时交换两个乌龟的位置,则上方最大重量

2015-01-22 20:00:49 475

原创 UVA 10617

#include #include #include using namespace std;long long dp[100][100];int main(){ int T; cin>>T; while(T--){ string t; cin>>t; memset(dp,0,sizeof(dp)); for(int i=1;i<=t.length();i++)

2015-01-19 18:37:53 335

原创 UVA 10271

状态dp(i,j)表前i只筷子中选出j对的代价,那么状态转移为dp(i,j)=min{dp(i-1,j),dp(i-2,j-1)+(leni-leni-1)^2}。#include #include #include using namespace std;int dp[5010][1010]={0},len[5010];int main(){ int T; cin>>T;

2015-01-19 11:00:45 390

原创 UVA 10304 dp的四边形不等式优化

最优二叉搜索树问题,设状态dp(l,r)为l到r构成一颗二叉树的最小花费,则有状态转移方程dp(l,r)=min{dp(l,k-1)+dp(k+1,r)+w(l,r)} (l  可以用记忆化搜索求解,需要注意边界条件即l>r是返回0,由于函数调用所消耗的时间,记忆化搜索这题用了4.725s。#include #include #include using namespace std;

2014-12-26 16:33:04 435

原创 UVA 10306

理解题意真是一个硬伤,这一题大致是格丁n个向量,求用这些向量相加得到给定长度的最小数。二维无限背包。一开始用了vector存到达过哪些节点,但写完发现没把顺序考虑进去,就直接遍历矩阵更新状态了。#include #include #include using namespace std;int dp[310][310];int main(){ int T; cin>>T; w

2014-12-22 20:46:27 358

原创 UVA 590

题目大意为小偷逃跑,有n个城市可以去,计划逃脱k天,问第k天到达目的地即n号城市的最小花费,主要是输入那部分比较不太好理解,每n-1行对应一个城市到达另外n-1个城市的信息,d表示循环节,之后d个整数表示每天的费用,0表示没有航班。   设状态dp(t,i)表示第t天在i号城市的最小花费,那么状态转移为dp(t,i)=min{dp[t-1][j]}(dp[t-1][j]!=-1 && cost

2014-12-22 15:00:37 462

原创 SPFA算法

求最短途径算法,因为其时间复杂度为O(|E|),所以适合边数较少的最短路径问题。  推荐两个不错的讲解,一个是hihocoder上的,http://hihocoder.com/contest/hiho25/problem/1,还有一个是NOCOW,http://www.nocow.cn/index.php/SPFA。  下边是一道裸SPFA的题目,输入顶点数,边数,起点,终点,求起点到终点

2014-12-21 11:45:40 378

原创 UVA 10651

题目大意是给12个空槽,初始时有以下空槽中有石头,可以把两个连续的石头移动到相邻的一个空槽,并移调中间的石头,求最少剩余几块石头。  用一个整数表示状态,因公也就不到10000种状态,数组记录即可,状态转移用位操作即可。#include #include #include #include #define lowbit(x) x&(-x)using namespace std;

2014-12-20 13:25:50 367

原创 UVA 10534

这题的题意很简单,求满足题目所给性质的子序列的最长长度,一开始竟然晕晕乎乎的用了枚举中间元素+LIS的方法求解,好吧,必然超时,然后用了常规的方法,从左到右求一次递减,从右到左再求一次,最后比较求解,提交后发现还是超时,此时已然意识到求LIS问题应该有更快的方法,于是乎上网一搜,果然有,下面是转载闷瓜蛋子的专栏博客中转载的介绍LIS问题的nlogn方法,原作者因为没有标明所以不知道最初的出处。

2014-12-16 21:21:17 384

原创 UVA 10069

题意为求母串中子序列的个数。一开始以为100*100*10000*sizeof(int)会存不下,一顿挠头皮,最后看了报告才知道可以存下,好吧,那么设状态dp(i,j)为母串前i位中含有子串前j位的序列数,那么状态转移显然为,如果母串第i位等于子串第j为,那么此时需要加上母串前i-1位中含子串前j位的数量以及母串前j-1位中含子串前j-1的数量,式子为dp(i,j)=dp(i-1,j)+dp(i-

2014-12-16 15:16:47 477

wwwscan字典

同学们,有wwwscan是没有用的,字典才是关键,别告诉我不会用,压箱底的字典

2014-08-28

2014北大acm集训课件

这是2014北大的ACM培训的课件,可以说比较基础,对区域赛和算法学习都有很大帮助。

2014-08-25

x-spoot arp嗅探工具

arp嗅探必备神器,可猜解弱口令,建立ipc连接,破解ftp用户名密码,

2011-10-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除