随笔分类 -  ACM

1 2 3 4 下一页

poj1157
摘要:今天开始做dp,感觉dp比较考思维能力,关于那个动态转移方程,我一直很好奇人们是怎么推的呢??有没有什么方法呢???题目大意:每种花有一个编号,有几个花瓶,花瓶也是有编号的,每种花放在不同的花瓶的艺术价值不一样,要你把这些花按某种策略放在这些花瓶里,得到艺术价值总值最大,并且,编号小的花所在的花瓶的编号要比编号大的花所在花瓶的编号小。 ans[i][j]表示前i朵花放进前j个瓶子中的艺术值a[i][j]表示第i多花放在第j个瓶子里面的艺术值动态转移方程:ans[i][j]=max(ans[i][j-1],ans[i-1][j-1]+a[i][j] 1 #include <iostream 阅读全文

posted @ 2012-08-17 21:22 矮人狙击手! 阅读(821) 评论(0) 推荐(0)

spa算法
摘要:sap算法详解与模板 [转]链接:1. Maximum Flow: Augmenting Path Algorithms Comparison http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=maxFlowRevisited2. 刘汝佳《算法艺术与信息学竞赛》 P321 ( 注: 上面的代码似乎有误,retreat()部分未回退< 详见下文or 链接1. > )---------------------------------------------关键概念与性质:距离函数(distanc 阅读全文

posted @ 2012-08-17 18:52 矮人狙击手! 阅读(1775) 评论(0) 推荐(0)

poj1459(网络流)
摘要:这道题跟我前面写的那两道网络流的题差不多,刚开始被题的描述吓到了,后来发现稍微变动下,原来的代码还可以继续用是这样的,原来的问题都是单源单汇问题,这题是多源多汇,关键在于把多源多汇问题转化为单源单汇,只要构造一个超级源点和一个超级汇点就ok了,把超级源点和各个源点之间加一条边,把各个汇点和超级汇点之间加一条边,这样就ok了,其实很简单关于最大流的问题我只会这一种方法,其他还有spa,ek ,以及spa算法的优化问题,这些最好都学习下 1 #include <cstdio> 2 #include <cstring> 3 #define Max 0x7f7f7f7f 4 i 阅读全文

posted @ 2012-08-17 17:13 矮人狙击手! 阅读(431) 评论(0) 推荐(0)

hdu3549(网络流)买一送一poj1273
摘要:这道题跟poj1273是一模一样的,只略微改变了几个地方,就ok了,更正下,上面的算法不叫Ford_Fulkerson ,而是EK 1 #include <cstdio> 2 #include <cstring> 3 #define Max 0x7f7f7f7f 4 int n,m; 5 int path[100][100]; 6 int visited[100]; 7 int que[10000]; 8 int pre[100]; 9 int flow[100];10 int min(int a ,int b)11 {12 return a>b?b:a;13 } 阅读全文

posted @ 2012-08-17 15:34 矮人狙击手! 阅读(190) 评论(0) 推荐(0)

poj1273(网络流入门)
摘要:今天首次接触到网络流,看了半天有些地方还是不太理解,关于算法本身的理解可能还有点问题,所以在实现上还有点困难 1 #include <cstdio> 2 #include <cstring> 3 #define Max 0x7f7f7f7f 4 int n,m; 5 int path[205][205]; 6 int visited[205]; 7 int que[205]; 8 int pre[205]; 9 int flow[205];10 int min(int a ,int b)11 {12 return a>b?b:a;13 }14 int BFS()/ 阅读全文

posted @ 2012-08-17 15:05 矮人狙击手! 阅读(806) 评论(0) 推荐(1)

hdu1278(BFS)
摘要:关于BFS的题目,可以参考http://blog.csdn.net/cambridgeacm/article/category/1169182,比较多,我只做了一部分就做不下去了这几天一直在写BFS,算是二维,三维,优先,指定转弯次数……烦了,真的烦了,下次换个类型写吧题目要求转弯的次数不能超过k,BFS,从一个方向搜到底 1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 6 7 int 阅读全文

posted @ 2012-08-16 22:17 矮人狙击手! 阅读(268) 评论(0) 推荐(0)

poj2251(BFS)
摘要:三位的bfs,跟二维的差不多 1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 using namespace std; 5 6 char map[35][35][35]; 7 int ans[35][35][35]; 8 int visited[35][35][35]; 9 int x1,y1,z1; 10 int x2,y2,z2; 11 int l,r,c; 12 int dir[6][3]={{1,0,0},{-1,0,0},{0,-1,0},{0,1,0},{0,0, 阅读全文

posted @ 2012-08-16 18:33 矮人狙击手! 阅读(171) 评论(0) 推荐(0)

poj3984(BFS)
摘要:跟前面的几乎是一样的,不过这道题需要记录下路径输出的时候从后往前找,找到第一个时开始输出,所以要用到递归 1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 #define Max 0x7f7f7f7f 5 using namespace std; 6 7 8 int map[6][6]; 9 int visited[6][6];10 int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};11 int ans[6][6];12 int pre[30] 阅读全文

posted @ 2012-08-16 16:36 矮人狙击手! 阅读(728) 评论(0) 推荐(0)

关于优先队列
摘要:转自:http://www.cnblogs.com/ffj343967016/archive/2012/07/22/2603632.html 1 #include<iostream> 2 #include<functional> 3 #include<queue> 4 #include<vector> 5 using namespace std; 6 7 8 struct cmp1 9 { 10 bool operator () (int &a, int &b) 11 { 12 return a > b ; // ... 阅读全文

posted @ 2012-08-16 15:49 矮人狙击手! 阅读(196) 评论(0) 推荐(0)

hdu12429(BFS+优先队列)
摘要:1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 #include <queue> 5 #define Max 0x7f7f7f7f 6 using namespace std; 7 struct node 8 { 9 int x; 10 int y; 11 int time ; 12 friend bool operator < ( node a,node b) 13 { 14 return a.time>b.time;//开始错在这个... 阅读全文

posted @ 2012-08-16 15:38 矮人狙击手! 阅读(204) 评论(0) 推荐(0)

hdu1372(BFS)
摘要:简答的BFS求“马”从一点到另一点的最短距离,马走日,BFS即可 1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 #define Max 0x7f7f7f7f 5 using namespace std; 6 7 int visited[10][10]; 8 int ans[10][10]; 9 char a[5],b[5];10 int dir[9][2]={{-2,1},{-2,-1},{2,1},{2,-1},{-1,2},{-1,-2},{1,2},{1,-2}};1 阅读全文

posted @ 2012-08-15 21:26 矮人狙击手! 阅读(1322) 评论(0) 推荐(0)

hdu2612(BFS)
摘要:今天第一次动手写BFS,原理都懂,只是原来一直没有实现过,实现起来感觉还是蛮简单的没有用队列,用的是数组这道题:求2个点到KFC的距离之和,使其最小,可用2次BFS,分别求出2个点到各个KFC的最短距离,然后找出和最小的即可 1 #include <stdio.h> 2 #include <cstring> 3 #define Max 0x7f7f7f7f 4 using namespace std; 5 int visited1[205][205]; 6 int visited2[205][205]; 7 int ans1[205][205]; 8 int ans2[ 阅读全文

posted @ 2012-08-15 20:32 矮人狙击手! 阅读(290) 评论(0) 推荐(0)

hdu2680(最短路径问题)
摘要:这个最短路径问题好,刚开始一直TLE,看了别人的结题报告后,突然感觉是自己笨了,不知道,灵活运用了,这道题用到了一个虚拟节点的问题本题中起始点有多个,如果按照正常的方法来做的话,可能要循环多次,求不同起点的最小值,这样时间就会话费的多些,采用虚拟节点后,把这个点到每个起始点的距离都设置为0,当有某个点到其余的点有相同的最短路径是,任选一条即可,这题就是运用的这点知识,好啊 1 #include<stdio.h> 2 #include<string.h> 3 #define inf 100000000 4 int map[1010][1010]; //注意这道... 阅读全文

posted @ 2012-08-15 10:33 矮人狙击手! 阅读(500) 评论(0) 推荐(0)

hdu1596(最短路径问题)
摘要:最短路径的变形,刚开始用g++交,一直超时,后来改用c++交就过了,看来还是c++比较给力#include <stdio.h>#define max(e1,e2) ((e1)>(e2)?(e1):(e2))double safe[1005][1005];int n;int main(){ while(scanf("%d",&n)!=EOF) { //cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { //c... 阅读全文

posted @ 2012-08-14 19:42 矮人狙击手! 阅读(898) 评论(2) 推荐(0)

hdu2544(最短路径问题)
摘要:跟前面一题一模一样,稍微改了点代码,直接一次AC 1 #include <cstring> 2 #include <stdio.h> 3 #define Max 0x7f7f7f7f 4 using namespace std; 5 int map[205][205]; 6 int dis[205],visited[205]; 7 int n,start,end; 8 void Dijkstra() 9 {10 dis[1]=0;11 int pos;12 for(int i=1;i<=n;i++)13 {14 int min=Max;15 ... 阅读全文

posted @ 2012-08-14 10:53 矮人狙击手! 阅读(243) 评论(0) 推荐(0)

hdu(1874)最短路径问题
摘要:贡献了一次wa,有重边,忘了考虑,看下discuss真好,要不然不知道这错误要找到什么时候这道题算是基础题吧 1 #include <cstring> 2 #include <stdio.h> 3 #define Max 0x7f7f7f7f 4 using namespace std; 5 int map[205][205]; 6 int dis[205],visited[205]; 7 int n,start,end; 8 void Dijkstra() 9 {10 dis[start]=0;11 int pos;12 for(int i=0;i<n;i++) 阅读全文

posted @ 2012-08-14 10:39 矮人狙击手! 阅读(262) 评论(0) 推荐(0)

hdu(2112)最短路径问题
摘要:两个小小的细节,调试了半天啊,不过这次学了下在codeblocks里面的调试,原来我只会在vc里面调试阻断路径问题,Dijkstra算法,从起始点到终点,只要两个步骤,第一求距离起始点最短的点,把该点加入起点集后更新起点到其余个点的距离,知道把所有点都添加进来,所以外循环的次数就是点数 1 #include <stdio.h> 2 #include <cstring> 3 #include <stdlib.h> 4 #define MAX 0x7f7f7f7f 5 int map[155][155],visited[155],dis[155]; 6 char 阅读全文

posted @ 2012-08-14 09:59 矮人狙击手! 阅读(327) 评论(0) 推荐(0)

hdu1709
摘要:简单题吧,只要把多项式相乘的原理搞明白了,应该很容易想到思路,可能表达上还略微有点不太顺畅 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int res[255][105];//第一个中括号表示金额,第二个中括号表示硬笔数量,值表示有多少种方法 5 int tmp[255][105]; 6 int main () 7 { 8 memset(res,0,sizeof(res)); 9 memset(tmp,0,sizeof(tmp));10 int value[]={0,1,5,10 阅读全文

posted @ 2012-08-13 21:53 矮人狙击手! 阅读(188) 评论(0) 推荐(0)

hdu2609
摘要:这一道题有一个需要考虑的东东,就是硬币的数量不可以超过100,如果没有这个条件的话,还真的是水题一枚所以这道题要用到二维数组,其中有一个来存硬币的 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 int res[255][105];//第一个中括号表示金额,第二个中括号表示硬笔数量,值表示有多少种方法 5 int tmp[255][105]; 6 int main () 7 { 8 memset(res,0,sizeof(res)); 9 memset(tmp,0,sizeof(tm 阅读全文

posted @ 2012-08-13 21:51 矮人狙击手! 阅读(236) 评论(0) 推荐(0)

hdu1028(母函数)
摘要:母函数原来学过一点,不过现在差不多是忘完了,再次学习,刚开始仍感觉不是那么好理解 1 #include <stdio.h> 2 using namespace std; 3 int main() 4 { 5 int n; 6 int a[121],b[121]; 7 int i,j,k; 8 while(1) 9 {10 scanf("%d",&n);11 for(i=0;i<=n;i++){a[i]=1;b[i]=0;}12 for(i=2;i<=n;i++)//第几个多项式13 {14 ... 阅读全文

posted @ 2012-08-12 21:21 矮人狙击手! 阅读(196) 评论(0) 推荐(0)

1 2 3 4 下一页

导航