acm
文章平均质量分 59
sevenkplus_
这个作者很懒,什么都没留下…
展开
-
HDU 1010 深搜+剪枝
剪枝有些多导致我超时两次,一开始想到用广搜但是发现不行,因为这一题要求的是在特定的时间点到达迷宫出口,用广搜找的的是最快到达出口的时间.#include #include #include #include using namespace std;char maps[10][10];int res,total;int width,length,time;int sx,sy,原创 2012-08-28 14:49:44 · 1716 阅读 · 0 评论 -
hdu 1392 凸包问题
凸包算法来自于:http://blog.csdn.net/fivedoumi/article/details/7653128当 n==2 的时候要特殊考虑;#include#include#include#define maxn 1000typedef struct point{ double x,y;}point;point set[maxn];point ch[m转载 2012-08-16 19:42:22 · 683 阅读 · 0 评论 -
面对算法问题怎么办??
加入ACM校队一个月了,可是感觉现在解决题目的时候仍然很吃力,而且思路比较混乱.今天在网上无意间看到了一篇文章介绍计算机专业如何学习,颇有感触,就把其中的一段转载过来希望可以给自己启发.不过文章出处突然忘了....当遇到一个算法问题时,首先要知道自己以前有没有处理过这种问题.如果见过,那么你一般会顺利地做出来;如果没见过,那么考虑以下问题:1. 问题是否是建立在某种已知转载 2012-08-30 03:05:51 · 1243 阅读 · 0 评论 -
HDU1398 (母函数)
模板直接用用....#include#includeint money[17];int c1[3000],c2[3000];void init(){ int i; money[0] = 1; for(i=1;i<=17;i++) money[i-1]=i*i;}int main(){ int i,k,j; int m,n; init(); w原创 2012-08-19 19:37:41 · 611 阅读 · 0 评论 -
HDU2152 (母函数)
#include#includeint start[3000],end[3000];int c1[3000],c2[3000];int main(){ int i,k,j; int m,n; while(~scanf("%d%d",&n,&m)) { memset(c2,0,sizeof(c2)); memset(c1,0,原创 2012-08-19 19:25:19 · 711 阅读 · 0 评论 -
HDU1028 (母函数模板)
#include using namespace std;const int _max = 10001;int c1[_max], c2[_max]; int main(){ int nNum; int i, j, k; while(cin >> nNum) { for(i=0; i<=nNum; ++i) {转载 2012-08-19 14:47:42 · 585 阅读 · 0 评论 -
HDU--1085 (母函数)
#include#include#includeint coin[3];int money[3]={1,2,5};int c1[6000],c2[6000];int sum;int main(){ int i,j; while(1) { sum = 0; for(i=0;i<3;i++) { scanf("%d",&coin[i]); sum +=转载 2012-08-19 14:43:38 · 463 阅读 · 0 评论 -
HDU1150-- Machine Schedule( 二分图最小顶点覆盖)
当做模板来用吧..#include#includeint n1,n2,m,ans;int result[1005];int state[1005];int maps[1005][1005];void init(){ int t1,t2,job; int i; memset(maps,0,sizeof(maps)); memset(result,原创 2012-08-18 20:08:52 · 863 阅读 · 0 评论 -
HDU1372 BFS
拿来训练一下自己的BFS,注意棋子移动的方向.题目中的棋子是 马 #include#include#includetypedef struct knight{ int x,y; int step;}knight;typedef struct node{ int front,rear; knight place[10000];}node;int dir[8原创 2012-08-17 20:00:07 · 567 阅读 · 0 评论 -
HDU1253 BFS
这一题的陷阱好多啊;1:出口可能是墙;2:如果离开的时候魔王恰好回来,输出离开时间而不是 -1;3:这个条件有些诡异,就是如果迷宫只有一个位置依然输出-1..搞不懂#include#include#includetypedef struct node{ int x,y,z,t;}node;typedef struct queue{ int front,rear;原创 2012-08-17 19:08:58 · 555 阅读 · 0 评论 -
高精度运算-(加法减法乘法)
不容易啊不容易.......我这种菜鸟写了一下午..//c 语言高精度运算//加法/减法/乘法#include #include #include #include //an 记录第一个数组的长度 bn记录第二个数组的长度int an,bn,fa=1,fb=1;//数组存储char b1[250],b2[250];void input(int a1[],int原创 2012-08-21 15:52:52 · 1451 阅读 · 0 评论 -
组合博弈基础
文章转自:http://blog.csdn.net/tongyongzh/article/details/6175034博弈论(一):Nim游戏博弈论(二):Sprague-Grundy函数Game theory初步寻找必败态——一类博弈问题的快速解法博弈论(一):Nim游戏重点结论:对于一个Nim游戏的局面(a1,a2,...,an),它是P-position转载 2012-08-22 09:01:49 · 973 阅读 · 0 评论 -
hdu1517 小小的博弈
只要记住2 和 9 交替出现就行了(当然 n==2 n==9 的时候例外)下面的说明来自:http://blog.sina.com.cn/s/blog_67e7f5fa0100ij5o.html 这题其实不是求必败点,必胜点,而是求必败段,和必胜段,经过推敲后发现转换下就变成求必败,必胜段的左届,比如162,那很明显>=162/9的都是必胜点,那由博弈的思想得到,任意一步都进入原创 2012-08-22 10:38:05 · 722 阅读 · 0 评论 -
hdu1238 字符串应用
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1238首先将给定的字符串按照长度进行排列; 枚举最短的字符串; 对枚举的每个字符串在其它字符串中进行查找,查看是否是其它字符串的子串; 统计符合条件的字符串的长度,选取最大的长度.PS:不仅要比较子串,还要比较子串的反串.#i原创 2012-08-28 09:02:33 · 688 阅读 · 0 评论 -
HDU1022 堆栈模拟
传送门::: http://acm.hdu.edu.cn/showproblem.php?pid=1022简单的模拟....+stl 水过不过方法很挫啊.#include #include #include #include using namespace std;int main(){ char str1[15],str2[15]; int n,i,k;原创 2012-08-27 20:33:07 · 925 阅读 · 0 评论 -
HDU 2069 动态规划
状态转移方程 dp[ j ][ k ] = dp[ j-1 ][ k-money[i] ] + dp[ j ] [ k ];注意 dp[0][0]处赋值为1.#include#includeint dp[101][300];int money[6]={0,1,5,10,25,50};int n;void work(){ int i,k,j; memset(dp,0,原创 2012-08-19 17:45:15 · 890 阅读 · 0 评论 -
HDU1159 最长公共子序列
http://acm.hdu.edu.cn/showproblem.php?pid=1159 我要dpdpdpdpdpdpdp比较害怕动态规划的题目,状态转移方程经常找不到,比如这一题我还是画出表格才想出来的.作为小菜鸟一枚也只有这个方法了.好,以字符串abcfbc 和 abfcab 为例表格中的数字嘛.....姑且解释为子串的最大公共子串的长度.最优子结构这个原创 2012-08-23 11:22:34 · 1644 阅读 · 0 评论 -
HDU1087 最长上升子序列加强版
//http://acm.hdu.edu.cn/showproblem.php?pid=1087/*第一眼感觉是动态规划,但是时间复杂度还是很高的O(n*n)啊. */#include #include int digit[1005];int tmp[1005];int biggest(int n){ int res; int i,k; res=0; tmp原创 2012-08-23 09:54:20 · 852 阅读 · 0 评论 -
HDU1811 并查集+拓扑排序
http://acm.hdu.edu.cn/showproblem.php?pid=1811 这题非常经典,花了一个下午才攻克.加强自己的基础吧.利用并查集将 '='等号两边的数字并入到一个同一个集合,然后构建邻接表进行拓扑排序.1: 元素出现相等又不想等的情况 矛盾2: 有独立的点 不确定3:拓扑排序时入度为 0 的点有多个 矛盾4: 正确#incl原创 2012-08-24 18:44:36 · 1229 阅读 · 0 评论 -
Hdu1829 并查集+广度优先搜索
....WA了我N次........题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1829题目大意是这样:给你多组"bug"和"bug"之间的关系(我理解为交配关系...),让你查看这些"bug"里面有没有同性恋.好吧还是用测试数据来解释吧.23 31 22 31 34 21 23 4先看红色的原创 2012-08-24 22:38:25 · 798 阅读 · 0 评论 -
zoj 3633 map简单应用
Alice's presentTime Limit: 5 Seconds Memory Limit: 65536 KB As a doll master, Alice owns a wide range of dolls, and each of them has a number tip on it's back, the tip can be treated as原创 2012-08-26 22:12:42 · 783 阅读 · 0 评论 -
HDU2036 多边形面积模板
利用向量叉乘:三角形ABC面积可以利用向量 (↑AB) ×(↑AC)*(1/2)得出,对于多边形,可以随意选取多边形某一点为源点然后一次计算.对于如下:的多边形我们可以以P1为扇面中心,连接P1Pi就得到N-2个三角形,由于凸性,保证这些三角形全在多边形内,那么,这个凸多边形的有向面积: A=sigma(Ai) (i=1…N-2)原创 2012-08-24 10:52:00 · 954 阅读 · 0 评论 -
HDU1874 (dijkstral算法)
居然有重边.....有重边也就罢了居然可以起点和终点一样!!1:重边选择最小的;2:起点和终点相同的时候输出0.这样就行了.#include #include #define MAX 1000000int maps[202][202];int M,N;int visited[202],lowcost[202];void init(){ int i,h; i原创 2012-08-21 19:53:59 · 689 阅读 · 0 评论 -
HDU1241 DFS
#include#include#includetypedef struct node{ int x,y;}node;int maps[105][105];int status[105][105];node oil[10005];int n,k,total;int dir_v[8]={-1,-1,-1,0,0,1,1,1};int dir_l[8]={-1,0,1,-原创 2012-08-17 14:45:30 · 629 阅读 · 0 评论 -
HDU1312 dfs
本来以为还要回溯.不需要只要一直搜索下去就行了#include#include#includeint maps[101][101];int status[101][101];int x,y,total;int n,k;void dfs(int i,int h){ if(i>1&&!maps[i-1][h]&&!status[i-1][h]) { status[i-1]原创 2012-08-17 11:08:51 · 816 阅读 · 0 评论 -
DP入门--HDU1160
忙活了一个晚上终于完成了。。。就是最长上升子序列的变形版。#include#include#includetypedef struct node{ int weight; int speed; int i; int mark; int father;}node;node mice[1002];int cmp(const void *a,原创 2012-08-11 20:26:20 · 469 阅读 · 0 评论 -
hdu1297
递推题,但是数据范围太大,用大数相加,但是时间太长了。。890MS。。f(n) = f(n-1)+f(n-2)+f(n-4);#include #include #include #define N 1001char stre[1001][1001];char ch3[1001];void sum(char ch1[],char ch2[]){ int num[N],原创 2012-08-11 09:59:58 · 911 阅读 · 0 评论 -
zoj 1019 Illusive Chase
原题地址: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1019简单的搜索题就是要小心一些:#includetypedef struct step{ int x,y; char direction;}step;step steps[10000];int maps[101][101];int原创 2012-07-17 08:49:23 · 620 阅读 · 0 评论 -
zoj 1002 FireNet
原题:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002#include#includechar maps[5][5];int n,ans;int judge(int x,int y){ int temp; if(maps[x][y] == 'X' || maps[x][y] == 'C')r原创 2012-07-17 13:31:44 · 647 阅读 · 0 评论 -
hdu1290---数学题
http://www.cppblog.com/wing/archive/2010/08/09/122841.html?opt=admin(1) n条直线最多分平面问题 题目大致如:n条直线,最多可以把平面分为多少个区域。 析:可能你以前就见过这题目,这充其量是一道初中的思考题。但一个类型的题目还是从简单的入手,才容易发现规律。当有n-1条直线时,平面最多转载 2012-08-10 15:39:53 · 483 阅读 · 0 评论 -
acm-bfs入门(抓住奶牛)
2054: 抓住奶牛!Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 135 Solved: 27[Submit][Status][Web Board]Description不得了,xiaoC的农场里跑出来了一只奶牛,这可是让xiaoC很是揪心啊,于是xiaoC立刻放下了手头的工作,想疯狂的奶牛奋力追去,但说来也怪,xiao原创 2012-08-08 15:52:39 · 2231 阅读 · 0 评论 -
acm-dfs入门
接触acm的时间不长,只能从基础开始了。今天试试dfs的题目,很简单就过去了。2203: 简单迷宫 (图)Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 4 Solved: 1[Submit][Status][Web Board]Description这是个简单迷宫,请判断是否能走出迷宫。Inp原创 2012-08-08 12:36:36 · 2120 阅读 · 1 评论 -
并查集操作
把常用的并查集写下来备用:注:第一个并查集操作转自他人博客.1:typedef struct _node{ _node* parent; int rank;}node;node *s[5000];void makeSet(int x){ s[x]=new node; s[x]->rank=0; s[x]->parent=s[x];}node* fi原创 2012-08-05 12:14:56 · 577 阅读 · 0 评论 -
HDU3786 找出直系亲属(并查集)
一开始想用暴力求解,想了半天没有思路..其实用并查集好多了:#include#includeint find(int array[],int x,int y){ int k=0,mark=0; while(array[x] > 0) { k++; if(array[x]==y){mark=1;break;} x=原创 2012-08-04 18:10:08 · 831 阅读 · 0 评论 -
hdu1232 并查集
//并查集的入门题目#include int digit[1000];int find(int array[],int k){ while(array[k]>0) k = array[k]; return k;}int main(int argc, const char * argv[]){ // insert code here...原创 2012-08-04 09:44:18 · 615 阅读 · 0 评论 -
HDU 2602 Bone Collector(0/1背包)
还好这个题目只是要求打印最大权值,利用一维数组就可以解决了。#include#include#includeint v[1001],w[1001],f[1001];int main(){ int n; int N,V; int i,k; scanf("%d",&n); while(n--) { scanf("%d%d",&N,&V); for(i=0;i<N;i原创 2012-08-12 10:52:00 · 501 阅读 · 0 评论 -
DP--hdu2084树塔
可以说是最简单的DP问题了。从底向上计算,然后顶部就是权值之和最大的路径了。#include#include#includeint tree[101][101];int maxn(int a,int b){ return a>b?a:b;}int main(){ int n,t; int i,k; scanf("%d",&n); wh原创 2012-08-11 22:20:50 · 995 阅读 · 0 评论 -
hdu 1548 (广搜)
题目条件真是变态。。。无语了#include#include#includetypedef struct queue{ int front; int rear; int s[210];}queue;queue bark;int flag[210];int lift[210];void init(){ bark.front=bark.rea原创 2012-08-12 20:41:50 · 1185 阅读 · 0 评论 -
hdu 1016 (dfs)
很简单的深搜..虽然时间很长281MS.#include#include#includeint digit[21]; //存储数字int status[21]; //代表当前数字的状态int n;int judge(int sum){ int k=(int)sqrt((double)sum); int i; for(i=2;i<=k+1;i++) if(sum原创 2012-08-17 10:41:50 · 508 阅读 · 0 评论 -
素数打表
//高效率的打表看不懂..来个简单的模板void init_prime(){ int i, j; for(i = 2;i <= sqrt(1000002.0); ++i) { if(!prime[i]) for(j = i * i; j < 1000002; j += i) prime[j] = 1; } j = 0; for(i = 2;i <= 100000转载 2012-08-17 10:13:05 · 599 阅读 · 0 评论