IT民工
加油!
上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 29 下一页
摘要: http://poj.org/problem?id=3230 同样是一道DP的题,但是这道题确实想了很久,还是在staginner大牛的提醒下才想出来的,题目给的数据有ex[i][j]从i到j城市的花费,inc[i][j]为第i天在j城市的收入。状态转移方程为:f[i][j] =max( f[i-1][k] + inc[i][j] – ex[k][j] ). 其中f[i][j]代表的是第i天呆在j城所获到的最大收入。再遍历一遍求的的f值就知道m天呆在哪个城市的收入最大了!/*Problem: 3230 User: CSU_ACM1174Memory: 304K Time: 16MSLan... 阅读全文
posted @ 2012-04-02 18:22 找回失去的 阅读(455) 评论(1) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1160 这是一道DP的题,用w[i][j]代表用一个邮局覆盖第i个到第j个点所得到的最小距离和。用f[i][j]代表用前i个邮局覆盖前j个点所得到的最小距离和。然后根据这里我们可以推出状态转移方程为:f[i][j] = min( f[i][j ] , f[i - 1][k] + w[k + 1][j] ) ( k < j)./*Accepted 528K 79MS C++ 1195B 2012-08-07 14:23:15*/#include<stdio.h>#include<string.h>#includ. 阅读全文
posted @ 2012-04-02 18:12 找回失去的 阅读(174) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3259 题意大致是N个点,M条正常的边(双向)边权为正,W个虫洞,边权为负,想要我们判断回路中是否存在一个负圈。学习了bellman-ford算法来求负环,松弛结束后判断是否存在最短路,不存在则有负环。#include <stdio.h>#include <string.h>#include <stdlib.h>const int maxn = 1 << 9, inf = 0x3f3f3f3f;int dist[maxn];int N, M, W, es;struct Edge{ int u, 阅读全文
posted @ 2012-04-02 10:58 找回失去的 阅读(216) 评论(0) 推荐(1) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1874 这是一道基础的最短路的题,回顾了dijkstra算法,但是看题的时候有点不仔细,没注意到题目说的a, b之间可能有多条路,所以初始化出了点小问题,导致WA。#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 205;const int INF = 0x3f3f3f3f;int d[MAXN], w[MAXN][MAXN];bool vis[MAXN];int n, M, a, b, x 阅读全文
posted @ 2012-04-02 10:01 找回失去的 阅读(122) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2485 这是道最小生成树的题目,求的是最小生成树中最大边的权值。开始就想到用kruskal算法去做,因为边是从小到大排序的,所以保证最后一条加入生成树的边的权值是最小生成树当中最大的。Kruskal仅排序用的时间是O(mlog m),其中m 为n^2数量级的,为边的总数。 再说说prim算法,这个算法严格来说是今天才学的。在我看来,prim算法的精髓在于传递,建立最小生成树的方法就是一个传递的过程,先将编号为0的点作为树根,然后找到离0最近的一点j,加入生成树中,然后找离j最近的,每次都要更新lowc的值。找最大边的权值话就每次用加入的m. 阅读全文
posted @ 2012-03-31 23:03 找回失去的 阅读(236) 评论(0) 推荐(1) 编辑
摘要: Floyd求出任意两个城镇的距离,大于10的置为INF,使其不可达。然后求出符合条件的最大值,输出如果都没有符合条件的就输出 Send Kurdy。#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>const int INF = 0x3F3F3F3F;const int MAXN = 105;double x[MAXN], y[MAXN];double f[MAXN][MAXN], max;int N, n;double min( double a, double b 阅读全文
posted @ 2012-02-29 17:04 找回失去的 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 这是一道网络流的题。将六种不同大小的衣服看成六个点,编号1-6,将志愿者从7-M +6编号,然后源点s = 0, 汇点t = M + 7,网络流的模型就出来了。从源点到衣服的容量是N / 6,从志愿者到汇点的容量是1, 从衣服到志愿者的容量也是1.然后就按照白书上的EK算法写,用BFS找增广路。#include<iostream>#include<cstring>#include<queue>#define INF 100000000#define MAXD 50using namespace std;int flow[MAXD][MAXD], cap[MA 阅读全文
posted @ 2012-02-26 20:22 找回失去的 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 标准的贪心,先将供应商按照价格的升序排序,然后按需购买价格低的牛奶就可以得到最小的总价。/*ID:yucept21LANG:C++TASK:milk*/#include<cstdio>#include<cstdlib>#include<cstring>typedef struct tt{ int price, amount;}T;int N, M;T milk[5005];int cmp( const void *_p, const void *_q){ T *p = (T *)_p; T *q = (T *)_q; return p->price - 阅读全文
posted @ 2012-02-02 16:26 找回失去的 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 真心不知道怎么用动归,然后网上找到的做法:I think this problem's tip is.. len=string length Mutant : len is 1, and str[0]='B' Simple : if len is 1, and str[0]='A' Fully-Grown : str[len-1]='B', and str[len-2]='A' Mutagenic : str[0]='B', and str[len-1]='A' Else : Mutant然 阅读全文
posted @ 2012-02-02 15:45 找回失去的 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 求出一个矩阵的最大和,我们可以按照行和列计算一块区域的和然后和ans比较,更新ans的值。最后得出的就是所求的最大值。#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 110int n, ans;int mat[MAXN][MAXN];int max( int a, int b){ return a > b ? a : b;}int dp( int k){ int f[MAXN], a[MAXN]; memset( f, 0, sizeof f); memset( a, 0, 阅读全文
posted @ 2012-02-02 14:55 找回失去的 阅读(340) 评论(0) 推荐(1) 编辑
上一页 1 ··· 13 14 15 16 17 18 19 20 21 ··· 29 下一页