- 博客(7)
- 资源 (7)
- 收藏
- 关注
原创 POJ 3685
题意:N*N的矩阵,第i行第j列的元素为i*i+j*j+10^5*i-10^5*j+i*j,求第M大的数。题解:二分枚举答案,算出整个矩阵中比它大的元素个数以及比它小的元素个数(枚举j,二分枚举i)#include#include#include#includeusing namespace std;typedef long long LL;const LL TP=100000
2013-01-25 16:58:51 1042
原创 POJ 3046
题意:T种蚂蚁,共计A只,种内没有区别,问含有x只蚂蚁的子集有多少种(x∈[S,B])题解:动态规划,dp[i][j]代表用前i种蚂蚁凑成j只蚂蚁的集合的方法数,由于T*A太大,用滚动数组实现,最后输出的是答案mod 1000000#include#include#includeusing namespace std;int dp[2][100005],num[1005];con
2013-01-25 14:14:26 2030 1
原创 POJ 2893
题意:8数码问题的升级,就是通过移动空格(用0代替)使得原来状态变成有序的1234......0,不过,这题是N*M数码。题解:N*M都挺大的,搜索必然不行。考虑终态,实际就是逆序数为0的状态,然后四种操作方式分为:左右移动,对原序列的逆序数不影响;上下移动,如下:-------------0**********************x-------------x是任意数,现在要
2013-01-22 15:20:57 1212
原创 POJ 2258
题意:求图的最长路径,这里的最长路径是指每条边只能经过一次,但是点可以经过很多次的那种。题解:两遍dfs#include#include#includeusing namespace std;struct Edge{ int a,b,next;}edge[100];int head[100],nc,ans,pos;bool mark[100];void add(i
2013-01-22 13:28:11 618
原创 POJ 3440
题意:在n*m的棋盘上,每个格子是t*t的正方形,棋子是直径为c的圆。向棋盘上扔棋子,问棋子覆盖1、2、3、4个格子的概率。题解:数学公式推导,没多大难度,有两个细节:1、输出结果tile的单复数。2、tile后面的空格,单复数时是不一样的。#include#include#include#includeusing namespace std;const double PI=ac
2013-01-22 13:02:35 1134
原创 POJ 2763
题意:给定一棵含n个结点的树,共有q次操作,分为两种0 c :求从位置s到c的距离,然后s变成c1 a b:把第a条边的权值变为bn题解:求树中两点距离显然是LCA,关于对原树中边权的修改,假设改了(a,b)使得其边增大了c,那么如果a是b的父亲,那么以b为子树的所有结点到根的距离都将增加c。求解LCA可以得到dfs序列,记录下每个结点初始访问时间以及最后访问时间,那么如果以该节点
2013-01-19 19:26:29 1896 1
原创 POJ 1485
题意:n个加工厂,m个原料厂,原料厂地址与加工厂一致,m题解:dp[i][j]为前i个厂,j个原料厂最佳分配的总代价。另外,对于加工厂区间[a,b]用原料厂去覆盖的方法应该是建立在最中间那个点上,这样左右工厂数相等,到达它的距离之和最小。dp[i][j]=min(dp[k][j-1]+ds[k+1][i]),厂址位置就在(k+1+i)/2位置,可以用pre[i][j]记录该原料厂相关的
2013-01-19 15:05:32 1093
树状数组另一类用法(C++源码)
2014-01-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人