C++
文章平均质量分 60
NGccc
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #295 (Div. 2) D
题目链接: http://codeforces.com/contest/520/problem/D题目大意: 在一个XOY面上有很多cube,每个cube给定一个位置坐标,它(x,y)能稳定存在的条件是:要么坐标形如(x,y=0),要么在(x-1,y-1),(x,y-1),(x+1,y-1)方向上存在一个cube.现在给定一个初始的堆积方式,输入保证整体是稳定的,输入从上到下的c原创 2015-03-13 11:18:36 · 389 阅读 · 0 评论 -
hihocoder #1110 正则表达式
偶然看到的,看标签是dp和分治就做了。题目链接:http://hihocoder.com/problemset/problem/1110分析:dp[i][j]代表从i到j这一段是否为正则表达式。然后主要是有一个完整的括号的时候或者结尾是*的时候转移一下。具体看代码。#include #include #include using namespace std;co原创 2015-04-17 20:56:50 · 832 阅读 · 0 评论 -
2015编程之美资格赛B
题目链接:http://hihocoder.com/contest/msbop2015qual/problem/2分析:记状态为dp[i][j]表示从i到j这一段中的回文个数。状态转移方程:dp[i][j]=dp[i+1][j]+dp[i][j-1]+1 if(s[i]==s[j])dp[i][j]=dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1]原创 2015-04-17 21:10:29 · 383 阅读 · 0 评论 -
2015编程之美资格赛A
题目链接:http://hihocoder.com/contest/msbop2015qual/problem/1分析:大数据为10^9,其实仔细考虑不需要任何的枚举,年份再大也不是特殊的,前一个年份记为year1,后一个记为year2,考虑从公元元年到year1-1的年份中包含的2.29,计算公式为(year1-1)/4-(year1-1)/100+(year1-1)/400,然原创 2015-04-17 21:03:36 · 621 阅读 · 0 评论 -
hdu1028(母函数)
#include #include #include using namespace std;const int maxn = 130;int c1[maxn],c2[maxn];//c1[i] x^i表示的系数 c2为中间的项int main(){ int n; while(~scanf("%d",&n)) { for(int i=0;i<=原创 2015-05-21 08:46:40 · 484 阅读 · 0 评论 -
高斯消元模板
#include #include #include /*高斯消元就是模拟矩阵的线性变换,把矩阵化成上三角 然后判断解的情况.*/typedef __int64 ll;using namespace std;const int maxn = 105;ll a[maxn][maxn],x[maxn];//增广矩阵int row,col;//线性方程组的方程数为原创 2015-05-21 08:39:50 · 385 阅读 · 0 评论 -
hdu1085(母函数)
#include #include #include using namespace std;const int maxn = 8005;int c1[maxn],c2[maxn];int main(){ int a[4]; while(scanf("%d%d%d",&a[1],&a[2],&a[3]),a[1]||a[2]||a[3]) {原创 2015-05-21 08:45:15 · 458 阅读 · 0 评论 -
poj2115(扩展欧几里得)
#include #include #include using namespace std;typedef __int64 ll;ll exgcd(ll a,ll b,ll &x,ll &y){ ll d; if(b==0) { x=1;y=0; d=a; } else { d=exgcd原创 2015-05-21 08:51:14 · 423 阅读 · 0 评论 -
hdu3359浮点数的高斯消元
#include #include #include #include #define esp 1e-9using namespace std;const int maxn = 105;const int dir[4][2]={{1,1},{-1,1},{1,-1},{-1,-1}};double a[maxn][maxn],x[maxn];double b[maxn][maxn原创 2015-05-21 08:37:56 · 631 阅读 · 0 评论 -
扩展欧几里得最大最小正整数解
#include #include #include using namespace std;/*解模方程ax=b(mod n) x的正整数解等价于求ax+ny=b的x的正整数解令d=gcd(a,n) 若d|b 则方程有解,否则无解.gcd的过程实际就是在求ax+ny=gcd(a,n)的过程所以最后求出gcd后 x=1 y=0*/int ex_gcd(int a,int b,原创 2015-05-21 08:54:32 · 2184 阅读 · 0 评论 -
[水]Poj2349 Kruskal
原因:为了练习一下Kruskal,随便到poj找了一个求mst的题。- -题意:给一堆城市的坐标点,任何两个城市之间有两种通讯方式,一种是直接卫星通讯,不管两个城市距离多远,都可以通讯,另一种是微波通讯,通讯距离不超过D,D越大成本越高,给出s个城市之间可以用卫星通讯,其他必须得用微波,求所有城市都可以互相通讯的最小成本。分析:先用Kruskal求出mst,记录mst中的所有边,那么删除了原创 2015-04-15 15:35:09 · 439 阅读 · 0 评论 -
Dijkstra复习
看挑战程序设计竞赛上的。朴素的Dijkstra 如果用邻接矩阵存储,每次需要用O(|V|)的时间找到一个没有被使用过的且距离顶点距离最近的点,然后需要枚举一遍所有的点,这个操作也是O(|V|),一共更新O(|V|)次 一共的复杂度就是O(|V|^2)朴素的Dijkstra如果用邻接表存储,每次同样需要O(|V|)的时间找到一个没有被使用过的且距离顶点距离最近的点,但是总体只会把所有边枚举一原创 2015-04-14 13:32:15 · 441 阅读 · 0 评论 -
[水]POJ2431
POJ2431分析:每个路过的站都可以看成是随时想加油就加油的站,用堆维护路过的站的储油量。O(nlgn)代码#include #include #include #include #include using namespace std;const int maxn = 10005;int L,P;pair pr[maxn];int main(){ i原创 2015-04-13 18:00:09 · 382 阅读 · 0 评论 -
多重部分和问题 DP
这题是挑战程序设计竞赛上的。题意:n个不同的数字,每个有xi个,要恰好组成k这个数是否可能.如果单纯用dp[i][j]表示前i种数,和为j是否可能,那么转移方程就是:dp[i][j]=dp[i][j]||dp[i-1][j-k*a[i]] k=min(j/a[i],x[i])复杂度为O(n^3)如果利用多重背包二进制的思想把数字按照个数分成其他数字,则可以将复杂度降为原创 2015-04-13 17:36:55 · 480 阅读 · 0 评论 -
LIS(nlgn) DP
这题为挑战程序设计竞赛的例题。O(n^2)的解法有两种:第一种:dp[i]表示以第i个数结尾的LIS的长度。每次都得把1第二种:dp[i]表示LIS长度为i时结尾数字的最小值。枚举a[i]时找到第一个比a[i]大的a[k],更新dp[k]=a[i]。其实可以证明dp[]数组是单调递增的,因为假设不递增,必然存在一个dp[j]>=dp[j+1],那么一定可以推出矛盾,自己画画就可以了。那原创 2015-04-13 17:40:54 · 531 阅读 · 0 评论 -
Poj1182食物链 (并查集)
题目链接:http://poj.org/problem?id=1182题意:最多n个动物,每个都有可能是A,B,C三种中的一种,k句话,两种类型:1.1 x y 代表x与y是用一种2.2 x y 代表x吃y输出谎话的数目。两种做法都是并查集:第一种:因为每个动物都是这三种的一种,所以为每个动物初始化三种可能x-A x-B x-C分别代表x这个动物属于A,B,原创 2015-04-13 17:10:46 · 410 阅读 · 0 评论 -
多重集组合数DP
挑战程序设计竞赛上的例题。题意:有n种物品,每种有x[i]个,相同的物品不相互区分,从里面拿m个物品的方法数模M的余数.分析:考虑第i种物品拿没拿没拿:dp[i-1][j]拿了:dp[i][j-1]但是dp[i][j-1]包含了拿第i种物品x[i]+1个的可能,所以要减去dp[i-1][j-x[i]-1]状态转移:dp[i][j]=dp[i-1][j]+原创 2015-04-13 17:19:25 · 836 阅读 · 1 评论 -
[水]poj3259 (Bellman-ford)
题目链接:http://poj.org/problem?id=3259题目大意:给一个有向图,从一个点走到另一个点的道路是双向的,需要耗费一定的时间,但是还有一些虫洞连接两个地方,是单向的虫洞的作用是可以这个人立刻到达那个地方,而且时间倒流到t秒之前,现在问是否能从地图上某个点开始走遇到未来的自己。分析:建立有向图,走路的时间定为正的边权,虫洞连接的两个地方的有向边定为负的原创 2015-04-13 21:11:28 · 415 阅读 · 0 评论 -
复习Floyd-Warshall算法
能在O(|V|^3)求出图中任意两点间的最短距离。本质是一个dp,刚看这个算法时总感觉不能正确更新,因为当两个点中间有好多点的时候,借助那个点的操作不能正常更新,可是仔细想想,每次枚举中间点的时候,会更新与它相邻的两个点,感觉相当于缩点。。还可以想象,任何两个点之间的最短距离都是借助某个中间点或者直接到达,这样枚举已经包含了所有的状态,然而枚举顺序必须是先枚举中间点,然后是两个借助它的点,这是原创 2015-04-14 14:37:18 · 487 阅读 · 0 评论 -
Poj3723 最大权森林
题目链接:http://poj.org/problem?id=3723题目大意:给你n个女孩和m个男孩,然后说他们之间有r个好感值(相互的),然后说要招募这些所有人,每个人的招募费用起始是10000,后被招募的人看到自己有好感的人已经被招募的话,自己的费用就会变为10000-好感值,如果他同时对好几个人有好感(已经被招募的),他的费用为10000-最大好感值。- -#求招募所有人的原创 2015-04-16 14:33:12 · 546 阅读 · 0 评论 -
poj3255 次短路Dijkstra
挑战程序设计竞赛上的题目。题意:给一个边权都是正的无向图,求1到n点的次短路。分析:先说一下标准的dijkstra+heap的,实际上以前写的程序都是在完整循环一次之后会确定从s到这个点的最短路,并且这个值不会再改变了,之后的最短路依赖于已经得出最短路的点,这是基于原创 2015-04-15 16:54:00 · 1280 阅读 · 0 评论 -
hdu1796(容斥原理)
#include #include #include using namespace std;typedef __int64 ll;const int maxn = 15;int fac[maxn];int n,tt;int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}int lcm(int原创 2015-05-21 08:43:40 · 513 阅读 · 0 评论