自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 svd在推荐系统中的应用

1 引言本文是我在阅读Yehuda Koren的推荐系统相关论文时的学习笔记。2 预备知识我们使用u, v表示users,使用i, j表示items。ruir_{ui}表示user u对item i的评分。 K={(u,i)|rui is known}K=\{(u,i)|r_{ui}\ is\ known\}2.1 Baseline estimates在实际情况中,有一些

2016-11-23 16:54:21 427

原创 codeforces 519E A and B and Lecture Rooms (lca)

对于每次查询,找出两个点的lca,求出这两个点的距离,如果距离是奇数,那么答案为0,如果距离是偶数,找到中间点,找中间点可以用倍增法,倍增法就是先预处理出与节点v的距离为2^k的父节点,然后如果要求与v的距离为dis的父节点,那么就对dis二进制分解来求解就行了。#include<cstdio>#include<cstring>#include<algorithm>#include<iostr

2015-04-12 20:34:39 324

原创 codeforces 527E Data Center Drama

题目要求的是加最少的边使得所有点的入度和出度都是偶数。加边就是把每两个度数为奇数的点连起来。对于加完边后的图,若不考虑边的方向,则所有点的度都是偶数,这就一定会存在欧拉回路,找到这条欧拉回路,如果这条欧拉回路中包含偶数个边,那么一定可以构造出符合要求的解,如果是奇数,那么就随便找一个点给它加一个自环,这样边就变成了偶数个,即可构造出解。#include#include#in

2015-04-06 12:52:08 745

原创 codeforces 527D Clique Problem

首先将所有的点按x升序排序,那么对于j=w[i]+w[j] ,将该式变形成 x[i]-w[i]>=x[j]+w[j] , 又可进一步得到x[i]-w[i]>x[j]-w[j] , 由这个式子可以推出若点j和i有边相连,那么对于所有的k定义dp[i]表示以i为最后一个点的clique的最大值,那么如果有x[i]-w[i]>=x[j]+w[j]的话,则dp[i]=max(dp[i],dp[j]+1

2015-04-05 23:51:54 300

原创 codeforces 525D Arthur and Walls

每个2*2的格子中如果有一个*的话,则必需要删掉这个*。#include#include#include#include#includeusing namespace std;char g[2005][2005];struct NODE{ int x,y;};queueq;int n,m;bool check(int x,int y){ int i

2015-04-05 22:20:34 265

原创 codeforces 525E Anya and Cubes (暴力+中途相遇法)

将序列分成两半,分别进行暴力,先枚举前一半的所有情况并存下来,然后再枚举后一半的所有情况,并查找符合要求的前一半的种类数。#include#include#include#include#include#define ll long longusing namespace std;int a[35];mapm[30];int len;int n,k;ll s

2015-04-05 20:38:47 442

原创 poj 2486 Apple Tree (树形dp)

定义dp[u][j][1]表示在以u为根的子树中走了j步并返回了u点所能获得的最大的价值,dp[u][j][0]表示在以u为根的子树中走了j步但没有返回u点所能获得的最大价值。#include #include#include#include#include#define N 105using namespace std;int n,k,weight[N],dp[N][

2015-03-31 15:54:11 231

原创 zoj 3506 Cut the Tree (树形dp)

这道题细节很多,调了很长时间,设mx[u][j]表示以u为根的子树,切j刀后,这颗子树中与u连通的所有节点的最大权值,包括u。考虑每颗子树的决策,要么切掉,要么连上。 附用例: 4 1 -3 -2 1 1 1 2 2 3 1 44 2 -3 -2 1 1 1 2 2 3 1 45 2 1 2 3 4 5 1 2 2 3 3 4 4 56 2 -3 1 -2 3 4 0

2015-03-30 22:46:53 238

原创 hdu 3593 The most powerful force (树形dp+背包)

#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define N 100005using namespace std;int n,g,c[N],val[N],dp[505][10005];vector<int>edge[N];void dfs(int u,int vol){ in

2015-03-29 23:12:18 306

原创 poj 1655 Balancing Act (树形dp)

对于每个节点,它的balance要么来自于父亲节点,要么来自于儿子节点。 定义dp[u]为节点u的balance,sum[u]为以u为根的子树的节点个数,n为总共的节点个数。 如果来自于父亲节点,则dp[u]=n-sum[u]; 如果来自于儿子节点,则dp[u]=sum[v];#include<cstdio>#include<cstring>#include<algorithm>#inc

2015-03-28 17:34:42 251

原创 poj 1192 最优连通子集 (树形dp)

设dp[u][0]为以u为根的子树,子集中没有u的最大权值,dp[u][1]则表示子集中有u。 如果子集中没有u,那么u的所有儿子中只能选一个。 如果子集中有u,那么u的所有儿子要么不选,要么必须在子集中。 状态转移方程 dp[u][0]=max(dp[u][0],max(dp[v][0],dp[v][1])); dp[u][1]+=max(0,dp[v][1]); v是u的儿子节点#i

2015-03-28 16:45:53 267

原创 hdu 1011 Starship Troopers (树形dp+背包)

树形dp加泛化背包,状态转移方程dp[u][j]=max(dp[u][j],dp[v][k]+dp[u][j-k]),有很多细节需要注意,叶子节点就算没有bug也要留人,还有m=0的特殊情况。#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#define N 105

2015-03-28 15:56:55 285

原创 hdu 1011 Starship Troopers (树形dp+背包)

#include #include#include#include#include#define N 105using namespace std;int c[N],w[N],dp[N][N],m;vectoredge[N];void dfs(int u,int fa){ int v,len=edge[u].size(),i,j,k; for(j=m;j>=

2015-03-28 15:50:30 61

原创 hdu 1561 The more, The Better (树形dp+背包)

设dp[u][j]为以u为根的子树,选取了j个点所能取得的最大价值,状态转移方程dp[u][j]=max(dp[u][j],dp[u][j-k]+dp[v][k])#include #include#include#include#includeusing namespace std;vectoredge[205];int w[205],dp[205][205],sum

2015-03-25 19:52:09 228

原创 poj 1947 Rebuilding Roads (树形dp+背包)

定义dp[u][j]为以u为根的子树,形成含有j个点的独立的子树所需要切的最少的边。对于每个节点,考虑它的每个儿子是否要切掉,初始时dp[u][1]=0,这时还没有考虑任何的儿子节点,所以不用切边。然后依次考虑每个儿子节点,若该儿子节点要切掉,则dp[u][j]++,否则dp[u][j]=dp[v][k]+dp[u][j-k]#include#include#include

2015-03-24 18:46:28 251

原创 hdu 4405 Aeroplane chess (概率)

e[i]表示走到i时,距离走到n还需扔骰子的次数的期望,如果没有可以直接飞行的点的话,递推公式就是e[i]=(e[i+1]+e[i+2]+e[i+3]+e[i+4]+e[i+5]+e[i+6])/6 + 1 ,有可以直接飞行的点就做一下变换就好了。#include #include#include#define N 100020using namespace std;double

2014-12-01 19:43:24 269

原创 hdu 4405 Aeroplane chess (概率dp)

e[i]表示走到i时,距离走到n还需扔骰子的次数的期望,如果没有可以直接飞行的点的话,递推公式就是e[i]=(e[i+1]+e[i+2]+e[i+3]+e[i+4]+e[i+5]+e[i+6])/6 + 1 ,有可以直接飞行的点就做一下变换就好了。#include #include#include#define N 100020using namespace std;double

2014-12-01 19:41:01 64

原创 hdu 5106 Bits Problem (数位dp)

现预处理出两个数组,一个是c[i][j]表示长度为i

2014-11-20 11:46:32 439

原创 ZOJ 3529 A Game Between Alice and Bob(博弈)

每次可以用一个数的因子来替换这个数,name

2014-10-18 13:17:43 281

原创 CF 474D Flowers(dp)

对于第i个字符,如果是R,则它前面可以是任意的字符

2014-10-07 18:28:56 321

原创 CF 474C Captain Marmot

直接四重循环暴力枚举出所有的旋转,

2014-10-07 18:13:43 259

原创 hdu 5008 Boring String Problem(后缀数组)

每个后缀的所有前缀即为字符串的子串,先处理出每个后缀的所有前缀(与前一个后缀的某前缀相等的前缀除外)的名次区间。例如aaa这个串。它有三个后缀aaaaaa第一个后缀所有的前缀对应的名次区间为[1,1]第二个后缀对应的区间为[2,2]第三个后缀对应的区间为[3,3]如下:1a     2a   a           3a   a  

2014-10-04 12:08:51 286

原创 poj 3680 Intervals (最小费用最大流)

建图,先将0到1,,1到2,2到3,,,

2014-09-30 17:36:38 330

原创 poj 2987 Firing (最大权闭合子图)

最大权闭合子图,具体请看《最小割模型在信息学竞赛中d》

2014-09-30 17:29:53 237

原创 poj 2112 Optimal Milking (最大流+二分+floyd)

网络流的题目建图是最重要的。

2014-09-30 17:09:57 185

原创 hdu 5045 Contest (状压DP)

状压dp,将m道题分段,每段有ndao

2014-09-27 18:38:17 317

原创 CF 468A 24 Game

首先可以得出n<=3的时候一定不行,

2014-09-21 09:29:46 210

原创 Dice (bfs)

直接暴搜。#include #include#include#includeusing namespace std;struct A{ int f[7]; int ct;}a,b;bool vis[7][7][7][7][7];void makeflag(A &a){ vis[a.f[1]][a.f[2]][a.f[3]][a.f[4]][a.

2014-09-14 17:12:09 184

原创 Post Robot(模拟)

直接模拟处理就好了。

2014-09-14 17:05:37 429

原创 hdu 4995 Revenge of kNN (模拟)

直接按题意模拟就好了,注意index指的是输入进来

2014-09-13 10:10:02 301

原创 hdu 4993 Revenge of ex-Euclid(水题)

水题,直接暴力。#include #include#includeusing namespace std;int main(){ int a,b,c,n,x,y,ans; scanf("%d",&n); while(n--){ ans=0; scanf("%d%d%d",&a,&b,&c); for(y

2014-09-13 10:06:46 268

原创 hdu 4994 Revenge of Nim (博弈)

如果当前堆中物品的数量大于一,则当前要拿的人必胜,因为对于

2014-09-13 09:59:32 406

原创 usaco The Castle (并查集)

/*PROG: castleLANG: C++*/#include #include#include#include#define rep(i,a,b) for(i=a;i<=b;i++)#define N 10000000using namespace std;struct WALL{ bool w,n,e,s;}to[20],wall[55][55];i

2014-09-08 18:28:05 193

原创 CF 464A No to Palindromes!

给出的串是个不包含回文子串的串,

2014-09-08 13:24:01 313

原创 usaco Arithmetic Progressions (dfs)

先预处理出集合s中所有的数,然后dfs即可。/*PROG: ariprogLANG: C++*/#include #include#include#include#define rep(i,a,b) for(i=a;i<=b;i++)using namespace std;bool vis[150005];int n;bool dfs(int a,int b,int

2014-09-05 17:29:44 69

原创 usaco Prime Cryptarithm (暴力)

五重循坏暴力所有情况,判断每种情况是否合法。/*PROG: crypt1LANG: C++*/#include #include#include#include#define rep(i,a,b) for(i=a;i<=b;i++)using namespace std;int a[10];bool vis[10]={0};int check(int x){

2014-09-05 11:19:28 296

原创 usaco Barn Repair (贪心)

先假设有一块板子覆盖所有的

2014-09-04 21:36:00 313

原创 usaco Mixing Milk (贪心)

每次取价格最小的。/*PROG: milkLANG: C++*/#include #include#include#include#define rep(i,a,b) for(i=a;i<=b;i++)using namespace std;struct A{ int p,a;}f[5005];bool cmp(A a,A b){ return

2014-09-04 16:36:12 281

原创 CF 463E Caisa and Tree (模拟)

这道E题出奇的简单,直接模拟就行

2014-08-31 15:08:59 360

原创 CF 463D Gargari and Permutations (dp)

要找到所有序列中的最长的公共子序列,首先定义状态dp[i]为在第一个序列的

2014-08-30 22:34:29 339

空空如也

空空如也

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

TA关注的人

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