上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 32 下一页
摘要: 1 1 2 http://poj.org/problem?id=1724 3 一开始就直接写了一个DFS,直接TLE,以为用dfs肯定会超,后来看到discuss里有人 4 2 有人用了DFS,所以看了 看,发现进行一些优化,后就可以AC 5 3 优化看代码 6 4 7 5 #include<stdio.h> 8 6 #include<string.h> 9 7 #define maxn 2000010 8 #define max 0x7fffffff11 9 12 10 struct node13 11 {14 12 int d;15 13 ... 阅读全文
posted @ 2012-07-17 15:12 Szz 阅读(173) 评论(0) 推荐(0)
摘要: 1 http://poj.org/problem?id=1724 2 题目大意:单向边最短路问题,但是每条边都有一个费用,要求你的最短路方案的总的花费不能超过限制。 3 4 BFS+优先队列优化 5 因为题目要求的是在给定费用下的最短距离,所以 以距离优先建队列 广搜 6 7 #include<stdio.h> 8 #include<string.h> 9 #include<vector>10 #include<queue>11 using namespace std;12 #define maxn 2000013 #define max 0x7 阅读全文
posted @ 2012-07-17 15:04 Szz 阅读(164) 评论(0) 推荐(0)
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=4248 题解: 给定n种颜色的石头,每种颜色有si颗,同种颜色的石头不区分。问能构成多少种不同的石头序列(不同的序列是指:1.石头数不同;2.石头数相同,至少一个位置的石头颜色不同) dp[ i ][ j ]表示:考虑前i种石头构成的长度为j的序列的个数。 转台转移方程: dp[ i ][ j ] = dp[ i-1 ][ j ]; //未放入第i种颜色的石头 for k := 1 ~ min( j , s[ i ] ) //放入k个第i种颜色的石头 dp[ i ][ j ] ... 阅读全文
posted @ 2012-07-17 10:02 Szz 阅读(360) 评论(0) 推荐(0)
摘要: 1 /* http://poj.org/problem?id=3411 2 题目意思: 3 从a到b有两种付费方式 1:在a之前已经访问了c(不一定是刚访问),付费p;2:a直接到b 付费r; 4 求 1到n 的最小费用(注意有的点可以访问多次) 5 6 解题思路:dfs ,题目的关键是一个点可能被访问多次,一条边也可能被访问多次 7 某一个点是否访问过可以用f[i]标记,f[i]>0表示访问过了 8 其次还有一点很重要的,就是每个城市最多经过3次(网上说的“闸数”)就可以跳出循环了 9 (一开始以为每条边只会访问一次,wa)10 11 */12 #include<stdio.h& 阅读全文
posted @ 2012-07-16 10:25 Szz 阅读(230) 评论(0) 推荐(0)
摘要: 参考地址:http://baike.baidu.com/view/1478219.htm 设 a>b。 1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0; 2,ab<>0 时 设 ax1+by1=gcd(a,b); bx2+(a mod b)y2=gcd(b,a mod b); 根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a mod b); 则:ax1+by1=bx2+(a mod b)y2; 即:ax1+by1=bx2+(a-(a/b)*b)y2=ay2+bx2-(a/b)*by2; 根据恒等定理得:x1=y2; y1=x2-(a/b)*y2; . 阅读全文
posted @ 2012-06-28 22:06 Szz 阅读(343) 评论(0) 推荐(0)
摘要: 判断一点O是否在三角形中,只要满足: 面积S(abc)=S(oab)+S(Obc)+S(oca); 原理是向量的叉积(为三角形面积的2倍)平面向量 三个点a(x0,y0),b(x1,y1),c(x2,y2); 向量B=b-a; 向量C=c-a; X1=B的衡坐标; i j k X1 y1 0 X2 y2 0double area(double x0,double y0,double x1,double y1,double x2,double y2)//计算三角形面积{ return fabs(... 阅读全文
posted @ 2012-06-25 22:11 Szz 阅读(293) 评论(0) 推荐(0)
摘要: #include<stdio.h>#include<string.h>#define maxn 5000int f[maxn];//存放的是结果int main(){ int n,i,j; while(scanf("%d",&n)!=EOF) { memset(f,0,sizeof(f)); f[0]=1; for(i=2;i<=n;i++) { int c=0;//进位 for(j=0;j<maxn;j++) { ... 阅读全文
posted @ 2012-06-25 19:55 Szz 阅读(163) 评论(0) 推荐(0)
摘要: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=615 1 用dp[i][k]表示以k为最大值组成i需要多少种方法 2 那么答案ans=dp[i][50]+dp[i][25]+dp[i][10]+dp[i][5]+dp[i][1]; 3 用dfs()求dp[i][k]; 4 转移方程: 5 dp[i][k]=0 i<k||i<0 6 dp[i][k]= 求和dfs(i-k,x) 1<=x<=k; 7 8 9 阅读全文
posted @ 2012-06-23 11:02 Szz 阅读(162) 评论(0) 推荐(0)
摘要: http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=18206 1 /* 2 题目大意: 3 从第一列的任意一格出发,到子最后一列的任意一格,的最短路。(一开是理解错了,以为是到第n行m列那个格子,知道样例没过,才发现) 4 每一格只能这样走 5 6 7 8 而且第一行向上可以走到最后一行, 9 最后一行向下是第一行 10 */ 11 dp[i][j]存储 第[i][j]到一列的最短路 12 状态转移方程为: 13 dp[i][j]=min(dp[i-1][j+1],dp[i]... 阅读全文
posted @ 2012-05-27 11:24 Szz 阅读(365) 评论(0) 推荐(0)
摘要: 1 从组合数的定义可以知道。C(n, m) = C(n-1, m) + C(n-1, m-1); 2 所以,根据这个公式可以递归的求得组合数,代码如下: 3 4 long long C(int n, int m) { 5 if(m == 0 || n == 0 || n == 1 || m == n) return 1; 6 if(aug[n][m] != 0) return aug[n][m]; 7 8 aug[n-1][m] = C(n-1, m); 9 aug[n-1][m-1] = C(n-1, m-1);10 11 ... 阅读全文
posted @ 2012-05-26 17:14 Szz 阅读(247) 评论(0) 推荐(0)
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 32 下一页