
ACM
文章平均质量分 67
CxCo
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ的DP题
※最近更新:Poj斜率优化题目1180,2018,3709 列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699转载 2016-08-27 23:29:04 · 749 阅读 · 0 评论 -
hdu 2647 Reward (拓扑排序)
/*比较明显的拓扑排序。具体看注释*/#include#include#include#include#define N 10001using namespace std;int n,m,x,y,tsum,indx,flag;struct Node{ int in;//入度 int sum;//该点获得的奖金 int next;//后续节点数 ve原创 2012-10-07 16:08:04 · 287 阅读 · 0 评论 -
hdu 3023 Dirt (优先队列)
这道题。就是普通bfs过不了。。 很简单的优先队列。。#include#include#include#include#define N 1001using namespace std;int fx[8][2]={0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1},n,m,sx,sy,ex,ey,tp,tb;struct Map{ int cb原创 2012-10-11 10:07:07 · 922 阅读 · 0 评论 -
POJ3071 Football
/*足球比赛。。 想象一颗二叉树。从叶子开始dp直到根节点*/#include#include#include#includeusing namespace std;double dp[10][130];//dp[i][j] 第i次比赛 j获胜的概率double map[130][130];int n,t,l,s,bs;int main(){ freopen(原创 2012-09-28 14:14:55 · 346 阅读 · 0 评论 -
HDU 3076 ssworld VS DDD 概率DP
/*dp概率水水的..注意边界处理注意把平局的情况去掉。。因为题目说了比赛一定会结束的。所以不存在平局的情况。hdu数据错了(还好discuss里有人说)。。。。m,n输入要交换。。。。*/#include#include#includeusing namespace std;int n,m;double d1[7],d2[7],x;double gl[3];double原创 2012-09-28 17:43:05 · 418 阅读 · 0 评论 -
hdu 1198 Farm Irrigation
/*并查集。 模板一套问题就没了。 注意 用数组表示管道时别打错。*/#include#include#includeusing namespace std;int type[11][4]={{1,0,0,1},{1,1,0,0},{0,0,1,1},{0,1,1,0},{1,0,1,0},{0,1,0,1},{1,1,0,1},{1,0,1,1},{0,1,1,1}原创 2012-10-06 09:00:36 · 271 阅读 · 0 评论 -
Hdu-3926 Hand in Hand
原文链接:http://blog.youkuaiyun.com/niushuai666/article/details/6916764#include#include#include#include#include#includeusing namespace std;#define MAXN 10010int pre1[MAXN], pre2[MAXN]; //父节点int num转载 2012-10-06 16:30:32 · 327 阅读 · 0 评论 -
zoj 3607 Lazier Salesgirl 贪心
/*这道题有点坑。。比赛时有两道这个为背景的买面包。搞混了。 (lazier Or lazy)。这道题 买面包 。人睡觉时。。客人来了就走。不会叫醒人。。贪心。如果第从i个人开始买不到面包 。那他后面的人是肯定买不到的。如果第i个人买到了。那么前面的人一定会买到。。这里有个坑爹的地方。。更新平均值时 在maxtime<t[i+1]-t[i]的时候更新。*/#include#inclu原创 2012-10-07 09:50:53 · 639 阅读 · 0 评论 -
hdu 1596 find the safest road (最短路)
/*floyd直接水过*/#include#include#include#define N 1001using namespace std;int n,x,y;double road[N][N],t;int main(){ while(scanf("%d",&n)!=EOF) { memset(road,0,sizeof(road));原创 2012-10-07 15:19:04 · 714 阅读 · 0 评论 -
hdu3853 LOOPS
/* 概率dp 逆推:设dp[i][j]为离出口处还需要多少期望.则dp[R][C]为0. 公式:dp[i][j]=(2+dp[i][j])*map[i][j][0]+(2+dp[i][j+1])*map[i][j][1]+(2+dp[i+1][j])*map[i][j][2] 将左边的dp[i][j]移到右边: dp[i][j]=((2*m原创 2012-09-28 19:23:00 · 349 阅读 · 0 评论 -
树状数组
树状数组 武钢三中 吴豪【引言】 在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每转载 2012-09-28 15:05:10 · 288 阅读 · 0 评论 -
hdu1233 还是畅通工程 (prim)
/*prim模板 水过*/#include #include #define MAX 105#define MAXCOST 0x7fffffffint sum,n,graph[MAX][MAX];int adjvex[MAX];//记录顶点是否被访问int lowcost[MAX];//只管记录的是已是最小生成树集合到各个点的最小值void Prim(){ int i,j原创 2012-10-08 10:37:51 · 332 阅读 · 0 评论 -
poj 2352 Stars
/*看了别人的才会A的 第一个树状数组。。 慢慢熬吧。*/#include#include#include#define N 32010using namespace std;int cnt[N],lev[N];int n,x,y;int Lowbit(int i){ return i&(-i);}void Update(int x){原创 2012-09-28 16:15:36 · 272 阅读 · 0 评论 -
hdu 1270 小希的数表
/*枚举答案的第一个数。可知 枚举的第一个数若是正确的。那么用题目所给的输入数组 一个一个的减去第一个数得到一个数bi。用bi与前面的b1到bi-1分别相加。如果都是hash记录的数 则bi就是要求的一个数。 否则就不是。这样一直下去就可以求出结果。。最坑的就是题目中输入时n*(n-1)/2个和 这些和中有可能是重复的所以hash 要 ++ -- 不能是 0 1;*/#in原创 2012-10-05 14:02:07 · 1319 阅读 · 0 评论 -
hdu 4414 Finding crosses
/*找十字架。。 我们首先找出所有可能的中点(上下左右各有一个点)。 然后一个个中点bfs。。*/#include#include#include#includeusing namespace std;char map[52][52];int n,sum;int fx[4][2]={0,-1,0,1,-1,0,1,0};void init(){ su原创 2012-10-05 16:12:44 · 326 阅读 · 0 评论 -
ZOJ 3329 One Person Game(概率dp)
dp求期望的题。 题意: 有三个均匀的骰子,分别有k1,k2,k3个面,初始分数是0, 当掷三个骰子的点数分别为a,b,c的时候,分数清零,否则分数加上三个骰子的点数和, 当分数>n的时候结束。求需要掷骰子的次数的期望。 题解: 设 E[i]表示现在分数为i,到结束游戏所要掷骰子的次数的期望值。 显然 E[>n] = 0; E[转载 2012-10-09 17:22:10 · 364 阅读 · 0 评论 -
hdu 4081 Qin Shi Huang's National Road System(次小生成树)
/*首先求出最小生成树大小sum。并记录最小生成树的边。 然后遍历图中所有边。 如果边在最小生成树中.这用边两点的人口和/sum-边长. 如果边不在最小生成树中,这条边一上来就形成了一个环。 例如原来是a->b->c 加入一条边 ac 那么 为了保证sum-边长最小 就得sum-max(ab,bc) 则就是 ac两点的人口和/sum-max(ab,bc)原创 2012-10-10 18:10:31 · 1621 阅读 · 1 评论 -
poj 1679 The Unique MST (次小生成树)
首先说明这道题图式连通的. 判断最小生成树是否唯一等价于判断最小生成树与次小生成树是否相等。 题目就清晰了。 次小生成树不清楚的 看看我的另一篇 hdu 4081 Qin Shi Huang's National Road System(次小生成树)#include #include #include#define MAX 105#define MAXCO原创 2012-10-10 18:57:56 · 967 阅读 · 0 评论 -
poj 3519 Minimal Backgammon
#include#include#includeusing namespace std;double dp[105][101];//dp[i][j] 第i轮在j格的概率int n,t,l,b,map[101],flag,tj;int main(){ freopen("test.txt","r",stdin); while(scanf("%d%d%d%d",&n,&t,原创 2012-09-28 14:08:19 · 420 阅读 · 0 评论 -
hdu 1874 畅通工程续
/*标准dij*/#include#include#include#define N 201using namespace std;int road[N][N],adj[N],st,ed,x,y,t,vis[N],tmin,m,n;int main(){ while(scanf("%d%d",&m,&n)!=EOF) { memset(roa原创 2012-10-07 15:43:16 · 313 阅读 · 0 评论 -
hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (多重背包)
/*多重背包入门题。把问题转化成0-1也能A 。ORZ这个是多重背包代码*/#include#include#includeusing namespace std;int n,m;int price[101],w[101],cnt[101];int dp[101];int main(){ freopen("test.txt","r",stdin); int原创 2012-10-09 11:21:35 · 603 阅读 · 0 评论 -
hdu 1059 Dividing (多重背包)
/*多重背包*/#include#include#include#define max(a,b) a>b?a:b#define N 60001using namespace std;int a[7],sum,index;char f[N];int main(){ freopen("test.txt","r",stdin); index=0; while(原创 2012-10-09 19:14:22 · 396 阅读 · 0 评论 -
hdu 1879 继续畅通工程 (prim)
/*prim继续水 唯一要注意的就是当路已经建成的。把成本置为0*/#include #include #define MAX 105#define MAXCOST 0x7fffffffint sum,n,graph[MAX][MAX];int adjvex[MAX];//记录顶点是否被访问int lowcost[MAX];//只管记录的是已是最小生成树集合到各个点的最小值void原创 2012-10-08 10:57:32 · 729 阅读 · 0 评论 -
hdu 3371 Connect the Cities(prim)
/*题中 m可取0 <= m <= 25000可见不是个稀疏图 kruskal果断超了。prim 代码写的水 984ms水过。*/#include #include #define MAX 505#define MAXCOST 0x7fffffffint sum,n,m,k,graph[MAX][MAX],record[MAX];int adjvex[MAX];//记录顶点是否原创 2012-10-08 16:02:30 · 376 阅读 · 0 评论 -
hdu 2546 饭卡(背包)
/*这个题如果用数组把所有菜价都存了,就用0-1背包 hash记录菜价就多重背包吧。。 对于这题都可以 运行差别不大. 主要就是策略问题。题目说只要卡里有5块以上的钱的话。就可以买任何菜。 那么我们把开始时卡的余额减个5。找出菜价最大值。 然后把-5后余额当做背包的容量 进行背包就可以了。*/#include#include#include#def原创 2012-10-09 18:37:44 · 346 阅读 · 0 评论 -
hdu 1078 FatMouse and Cheese(dp 记忆化搜索)
/*dp 记忆化搜索*/#include#include#include#define max(a,b) a>b?a:busing namespace std;int n,k;int map[101][101];int dp[101][101];int fx[4][2]={-1,0,0,1,0,-1,1,0};bool isValide(int x,int y){ i原创 2012-10-09 20:11:25 · 554 阅读 · 0 评论 -
hdu 1461 Rotations and Reflections(搜索)
认真把题目读完,你就会发现 最终状态只会是题目描述的那几种。 bfs水过#include#include#include#include#define N 11using namespace std;struct Node{ char map[10][N]; int flag;};char endstate[10][N];Node t1,t2,t3;in原创 2012-10-11 10:12:33 · 584 阅读 · 0 评论 -
HDU 4280 Island Transport (网络流 sap)
裸的网络流模板题/*最大流模板sap*/#include#include#include#includeusing namespace std;const int MAXN=100010;//点数的最大值const int MAXM=400010;//边数的最大值const int INF=0x3f3f3f3f;struct Node{ int f原创 2012-10-11 16:23:44 · 511 阅读 · 0 评论 -
hdu1025 Constructing Roads In JGShining's Kingdom
#include#includeusing namespace std;int a[500001],dp[500001];//数组过大的时候,开全局变量防爆栈int main(){ #ifdef ONLINE_JUDGE #else freopen("test.txt","r",stdin); #endif int n,m,c,icase,原创 2014-11-07 14:48:50 · 399 阅读 · 0 评论 -
hdu 4284 Travel (floyd+dfs)
/*简单的floyd加dfs。 代码比较清晰就不多说了。*/#include#include#include#define N 101using namespace std;int road[N][N];int chosecity[N];int flag;int vis[N];struct City{ int cost; int earn;}ci原创 2012-10-11 16:39:44 · 498 阅读 · 0 评论 -
poj 1190 生日蛋糕 dfs剪枝
/* 大神的剪枝。。。 估计好下界 进行剪枝。 2*v/R+tmp>=ans; 2*v/R为估计的剩下的能表面积下界。。虽然这个下界是不可达的,*/#include #include#includeusing namespace std;int R,H,n,m,ans,mv[21],tmp;void dfs(int v,int dep,int R,int原创 2012-10-04 17:41:04 · 424 阅读 · 0 评论 -
POJ2151-Check the difficulty of problems
/*首先算出所有队伍至少都有A 1道的概率sum.再算出只A 1~n-1的概率t2答案就是sum-t2咯*/#include#include#include#define M 31#define T 1001using namespace std;double dp[T][M][M];//dp[i][j][k] 表示第i个队伍前k道题A了j道..double map[M],原创 2012-09-28 14:03:33 · 307 阅读 · 0 评论 -
poj1185 炮兵阵地
/*状态压缩入门经典.....*/#include#include#include#define max(a,b) a>b?a:busing namespace std;int map[101];int n,m,t,gd,tgd;int bound[13]={1,2,4,8,16,32,64,128,256,512,1024,2048};int dp[2][90][90];//滚原创 2012-09-28 20:59:07 · 288 阅读 · 0 评论 -
hdu 4415 Assassin’s Creed 贪心
/*这道题一眼就能看出是个贪心。但是做的时候想了N种策略最后都证明是错的。多亏dp哥。题意就不说了。这道题要求在尽量多杀怪的情况下保证花费最少。杀怪有2中方法 用怪物的剑 用自己的剑的耐久题目说了杀一个怪 。可以获得数量不等的剑。那么首先我们用耐久杀一个能在获得剑不为零的情况下花费耐久最小的怪。这样一来 我们肯定可以杀光那些带剑的怪。我们先假设用剑把带剑的杀光 ,把可以获得的剑的数量原创 2012-10-05 16:38:22 · 962 阅读 · 0 评论 -
hdu 1863 畅通工程 (prim)
/*prim 水过*/#include #include #define MAX 105#define MAXCOST 0x7fffffffint sum,n,graph[MAX][MAX],n2;int adjvex[MAX];//记录顶点是否被访问int lowcost[MAX];//只管记录的是已是最小生成树集合到各个点的最小值void Prim(){ int i,原创 2012-10-08 10:39:04 · 369 阅读 · 0 评论 -
hdu 1024 Max Sum Plus Plus(dp)
/* dp[i][j]是前j个数有i个子段的最大值 dp[i][j]=max{dp[i][j-1]+a[j],dp[i-1][t]+a[j]} i-1<=t<j; 考虑到数据大。 转移方程中只涉及 i ,i-1用滚动数组.*/#include#includeusing namespace std;int a[1000001],b[1000001],c[100000原创 2012-10-09 15:08:09 · 362 阅读 · 0 评论 -
hdu4405 Aeroplane chess 期望
大牛说的很清楚。。点击打开链接#include#include#includeusing namespace std;double dp[100010];int flag[100010];int x,y;int main(){ int n,m; while(scanf("%d%d",&n,&m)&&n!=0) { for(int i=原创 2012-10-04 10:44:17 · 317 阅读 · 0 评论 -
背包问题九讲(转)
背包问题九讲(转)P01: 01背包问题 这是最基本的背包问题,每个物品最多只能放一次题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表转载 2012-10-09 16:18:56 · 802 阅读 · 0 评论 -
hdu1754 I Hate It (线段树)
/*线段树 水题 模板套过*/#include #include#includeusing namespace std;#define max(a,b) a>b?a:bstruct LineTree{ int left,right;//左右区间端点 int highest;//区间最大值 LineTree *lchild,*rchild;};LineTr原创 2012-10-10 20:23:39 · 457 阅读 · 0 评论 -
hdu 3367 Pseudoforest (并查集)
/*Pseudoforest...伪森林。。题目说了那么多就是说这个图中最多有一个环..求所有边和的最大集*/#include#include#include#includeusing namespace std;#define N 10001#define M 100001int bin[N];int tse;bool flag[N];struct node{ i原创 2012-10-11 10:33:14 · 843 阅读 · 3 评论