
pku 解题报告
文章平均质量分 73
find_my_dream
在读本科计算机学生!菜鸟一个!
展开
-
pku 1466 Girls and Boys 最大独立集 解题报告
#include #include const int maxn = 505;int N, link[maxn];bool graph[maxn][maxn], visit[maxn];bool SearchPath(int u){ int v; for (v = 0; v { if (graph[u][v] && !visit[v]) { visit[v] = true;原创 2010-04-08 21:44:00 · 717 阅读 · 0 评论 -
pku 2392 space elevator 多重背包 dp 解题报告
pku 2392 space elevator解题报告算法:首先很容易想到先对3个测试数据的高度进行整体的排序(很显然,结果由最大的高度决定的);然后对每一组测试数据进行01背包dp.那么最优解就出来了。。 不过,我的算法要跑360多ms,我看到很多人都可以0ms,在这问问那些牛人了,怎么达到0ms? AC代码:#include #include #include原创 2009-12-22 09:22:00 · 815 阅读 · 0 评论 -
pku 3039 Margaritas on the River Walk 背包dp 解题报告
pku 3039 Margaritas on the River Walk 解题报告题意:给定n件物品和一个背包,第i件物品的体积为Vi,背包容量为C.要求吧一些物品放入背包使得剩下的物品都放不下去,求方案数.算法:如果熟悉01背包的话,此题很容易求解.思路:先对n个体积进行从小到大的排序,然后枚举i作为剩余物品中体积最小为v,dp[i]为方案数(其中i为当前体积).那么可以分析对于大原创 2009-12-15 23:00:00 · 565 阅读 · 0 评论 -
pku 1185 炮兵阵地 压缩dp 解题报告
pku 1185 炮兵阵地 解题报告思路:用二进制保存这一行中炮兵,例如1 0 0 0, 1表示炮兵.那么很明显用到了压缩dp。认真发现炮兵摆放的规律可知,每3行进行一个判断就可以了.也就是说,我们可以每3行都进行dp的转移,当然1、2行有特殊的处理.比如第i行为:1 0 0 0 0 第i+1行为0 0 0 0 1,那么怎么知道i+2的状态呢?其实我们可以先将合法的状态枚举出来,这样问题就变得原创 2009-12-11 20:06:00 · 1377 阅读 · 0 评论 -
pku 2772 up the stair 模拟推导 解题报告
pku 2772 up the stair 解题报告假设有9个箱子,3个人,10层楼,初始状态为:1在0,2在5有带箱子,3在3有带箱子.模拟一下这过程:第一个人运行: 第二个人运行: 第三个人运行: 那么可以发现总的时间由第二个人来决定的.即(10-5)*2+5 + 10 + 2 * 2 * 10.我们假设c[i]为每人在初始点回到最底层所原创 2009-12-13 01:05:00 · 643 阅读 · 0 评论 -
pku 1691 painting a board dfs+回溯 解题报告
pku 1691 painting a board 解题报告算法:先将数据转化为有向图,然后dfs+回溯.如sample中的数据可以变为以下的有向图: 然后利用深度搜索+回溯,求出最优值.AC代码:#include #include #define M 20#define inf 1000000 int n;int map[M]原创 2009-12-11 15:47:00 · 567 阅读 · 0 评论 -
pku 1185 炮兵阵地 压缩dp 解题报告
pku 1185 炮兵阵地 解题报告思路:用二进制保存这一行中炮兵,例如1 0 0 0, 1表示炮兵.那么很明显用到了压缩dp。认真发现炮兵摆放的规律可知,每3行进行一个判断就可以了.也就是说,我们可以每3行都进行dp的转移,当然1、2行有特殊的处理.比如第i行为:1 0 0 0 0 第i+1行为0 0 0 0 1,那么怎么知道i+2的状态呢?其实我们可以先将合法的状态枚举出来,这样问题就变得原创 2009-12-13 01:03:00 · 725 阅读 · 0 评论 -
pku 2411 modriaans dream 压缩dp 解题报告
pku 2411 modriaans dream解题报告很显然利用了状态压缩dp,我们假设:00ß-------à00 横放1ß----------à1 竖放那么以sample:2 4为例,得到的答案为一下:1、00000000:2、0000 11001100 或者: 00003、1111原创 2009-12-10 08:12:00 · 739 阅读 · 0 评论 -
pku 1179 polygon 石子合并的变形题dp 解题报告
pku 1179 polygon解题报告题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=1179题意:多边形游戏,开始时有一个由n个顶点构成的多边形.每个顶点被赋予一个整数,每条边都会被赋予*或者+.游戏是这样的:1. 先去掉一边;2. 进行替换,如题意所示:求最高分与得原创 2009-12-08 20:49:00 · 935 阅读 · 0 评论 -
pku 1129 channel allocation 回溯解题报告
pku 1129 channel allocation 回溯解题报告典型的着色问题,用回溯解决AC代码: #include #include #define M 27#define inf 10000000 int n, answer, x[M], map[M][M]; void generate_color(int i, int k){原创 2009-12-04 21:25:00 · 912 阅读 · 0 评论 -
四边形不等式优化dp应用------pku 1160 post office 解题报告
四边形不等式优化动态规划原理:1.当决策代价函数w[i][j]满足w[i][j]+w[i’][j’]时,称w满足四边形不等式.当函数w[i][j]满足w[i’][j]时,称w关于区间包含关系单调.2.如果状态转移方程m为且决策代价w满足四边形不等式的单调函数(可以推导出m亦为满足四边形不等式的单调函数),则可利用四边形不等式推出最优决策s的单调函数性,从而减少每个状态的状态数,将算法的时间原创 2009-12-03 11:01:00 · 7545 阅读 · 6 评论 -
pku 1905 二分 Expanding Rods 解题报告
pku 1905 二分 Expanding Rods 解题报告解题思路:由公式 弦长 = 2*r*sin(弧长/2*r)即b=2*r * sin(a / (2r)), a为弧长,b为弦长即b/a=2r/a*sin(a/(2r))角a/2r相当于a*pi / 2r*pi 即弧角=弧度=弧长/半径推理可知范围在0~pi/2 假设为x=a/(2r),即为弧长一半所对应的圆心角原创 2009-12-01 17:35:00 · 741 阅读 · 0 评论 -
pku 1724 roads 深搜 解题报告
pku 1724 roads 解题报告此题并不难,就是利用深搜就可以解决问题,但却让我吃尽了苦头.从一开始的wa,再改进算法,却一直TLE.一直搞不明白.终于在discuss中发现,自己数据结构的存储方式选择错了.于是改了数据结构的存储方式,才AC了.可自己觉得学到不少,收获良多.TLE的存储方式:void input(){ int i, S, D, L, T;原创 2009-11-26 22:50:00 · 579 阅读 · 0 评论 -
pku 1157 LITTLE SHOP OF FLOWERS 水货dp 解题报告
pku 1157 LITTLE SHOP OF FLOWERS 解题报告算法:很直观的dp,不多说。AC代码: #include #include #define inf -55#define max(a, b) (a > b ? a : b) int F, V, A[105][105], dp[105][105]; int main(){原创 2009-12-23 08:36:00 · 630 阅读 · 0 评论 -
pku 1011 sticks 搜索+剪枝 解题报告
pku 1011 sticks 搜索+剪枝 解题报告1、 从大到小搜索,缩小其搜索的范围。2、 剪枝。AC代码:#include #include #include int n, sum, len, number;int sticks[65];bool visit[65], flag;int cmp(const void *a, const原创 2010-03-05 15:58:00 · 680 阅读 · 0 评论 -
pku 1164 the castle 深度搜索 解题报告
简单的dfs:#includeusing namespace std;const int MAXN = 55;int count, a[MAXN][MAXN], used[MAXN][MAXN];void dfs(int i, int j){ used[i][j] = 1; ++count; if (a[i][j] % 2 == 0) //向原创 2010-03-10 21:14:00 · 604 阅读 · 0 评论 -
pku 1141 Bracket Sequence DP 解题报告
pku 1141 Bracket Sequence DP 解题报告以前做过的十分典型DP.黑书有这题的思路.关键是明白是最优子结构。#include #include using namespace std;#define min(a, b) a > b ? b : a int len;int d[110][110];char s[110], result[11原创 2010-04-09 20:07:00 · 641 阅读 · 0 评论 -
pku 2234 matches game 博弈
pku 2234 matches game 博弈算法:看了张一飞对博弈题的介绍,根据他的结论A了.可以说是最简单的博弈题。为了纪念一下第一道博弈题: #include #include #define M 25 int main(){ int i, n; long result; long number[M];原创 2010-04-02 16:09:00 · 635 阅读 · 0 评论 -
pku 1308 Is A Tree 搜索 解题报告
pku 1308 Is A Tree 搜索 解题报告注意几点就ok:1、0 0 //空树就是一棵树;2、入度为0结点有几个 //即not tree3、存在没有一个结点的入度为0 //即not treeAC代码: #include #include #define size 30#define Min(a, b) (a > b ? b :原创 2010-04-02 16:08:00 · 430 阅读 · 0 评论 -
简单的排序+贪心 pku 1089_Intervals
#include #include #include using namespace std;#define size 50005struct Node{ int left, right;};Node data[size];int n;int cmp(const void *a, const void *b){ struct Node *c = (Node *)a; struct Node原创 2010-04-14 16:06:00 · 670 阅读 · 0 评论 -
pku 2002 squares 几何的推导与hash表的优化
pku 2002 squares 几何的推导与hash表的优化题意:给出n个点,判断这些点可以构成多少个不同的正方形.算法:先确定正方形的2个点(x1,y1),(x2,y2).再利用等边三角形等初中的几何知识,求出另外2个点(x3,y3),(x4,y4).然后利用hash表判断这2个点是否存在.AC代码:#include #include #define max 2000原创 2010-04-01 19:53:00 · 966 阅读 · 1 评论 -
pku 2623 sequence median 水题 解题报告
pku 2623 sequence median 水题 解题报告水题而已.但却让我提交了wa几次,需要总结下:1. int范围不能超过2的32次方;2. __int64可以用qsort,但记得修改相应的cmp;3. 初次分析很重要,要狠且正确.AC代码:· #include ·原创 2010-04-11 22:04:00 · 800 阅读 · 0 评论 -
pku 1087 A Plug for UNIX 网络流 解题报告
pku 1087 A Plug for UNIX 网络流 解题报告十分郁闷的一题,与其说是练习算法与编程,还不如说练习你的英语.算法一般般,很多人都能想到.不是最大流就是利用二分图.可我在这过程中,总是建错图.原因在于没有理解好题意啊.像sample:4 A B C D 5 laptop B phone C pager B clock B comb原创 2010-03-29 23:33:00 · 890 阅读 · 0 评论 -
pku 1521 赫夫曼编码 Entropy 解题报告
pku 1521 赫夫曼编码 Entropy 解题报告题意:要快速明白此题,那么严蔚敏编写的数据结构>>有关赫夫曼编码的内容看明白才行;明白了赫夫曼编码此题就很容易AC了,题目本来就是要我们写一个赫夫曼树.算法:赫夫曼编码算法.AC代码:#include #include #include typedef struct{ int weight;原创 2010-03-26 19:03:00 · 1066 阅读 · 0 评论 -
pku 1422 Air Raid 最小路径覆盖图 解题报告
pku 1422 Air Raid 最小路径覆盖图 解题报告经过队友分析,是最小路径覆盖图。于是自己仔细分析一下,果然是这样,马上写,就a了。仍然懒得只贴代码: #include #include #define M 125 int n, m, ans;int map[M][M], link[M];bool visit[M]; bool find原创 2010-03-24 19:18:00 · 834 阅读 · 0 评论 -
pku 2253 Frogger Prim算法巧用 解题报告
pku 2253 Frogger Prim算法巧用 解题报告题意:给出一个有权无向图,求出一条生成树其权值最大值,但在所有的生成树下,其值是最小的. 算法:熟悉Prim算法的过程,那么就很好解决次问题. AC代码: #include #include #include #define M 205 const double MAX = 2000000;原创 2010-03-24 12:06:00 · 569 阅读 · 0 评论 -
pku 匈牙利算法 1469 COURSES 解题报告
简单题,纯粹用来温习一下匈牙利算法:#include #include #define maxn 305int test, p, n, m;int g[maxn][maxn], a[maxn], b[maxn];bool used[maxn];void add(int x, int y){g[x][y] = 1; }bool find(int s){f原创 2010-03-18 23:15:00 · 553 阅读 · 0 评论 -
pku 3187 Backward Digit Sums搜索
简单题: #include #include int N, Sum;int x[15];bool visit[15]; bool check(){ int i, k = N; int y[15], z[15]; for (i = 1; i { z[i]原创 2010-03-16 16:54:00 · 621 阅读 · 0 评论 -
pku 2287 TianJi -- The Horse Racing 贪婪的dp 解题报告
pku 2287 TianJi -- The Horse Racing 解题报告题目链接: http://162.105.81.212/JudgeOnline/problem?id=2287题意:中国古代有名的田忌赛马,就不多解释了.算法: 如果深知田忌赛马知道,田忌掌握有比赛的“主动权”,他总是根据齐王所出的马来分配自己的马,所以这里不妨认为齐王的出马顺序是按马的速原创 2009-11-28 15:05:00 · 1099 阅读 · 0 评论 -
pku 1947 Rebuilding Roads 树形dp 解题报告
pku 1947 Rebuilding Roads 解题报告算法: 一道不错的树形dp.不会做.看了大牛的状态转移方程才慢慢推敲出来.dp[now][j]:记录now结点,要得到一棵j个节点的子树去掉的最少边数1)考虑其儿子x如果不去掉x子树,则dp[now][j] = min(dp[now][j-k]+dp[x][k]) 0 2)如果去掉x子树,则dp[now][j] =原创 2009-11-29 20:31:00 · 561 阅读 · 0 评论 -
pku 2057 The Lost House 树形dp+背包dp 解题报告
pku 2057 The Lost House 解题报告一、题目大意:蜗牛的房子遗失在了一棵树的某个叶子结点上,它要从根结点出发开始寻找它的房子。有一些中间结点可能会住着一些虫子,这些虫子会告诉蜗牛它的房子是否在以这个中间结点为根的子树上,这样蜗牛就不用白跑路了。当然,如果有些结点没有住着虫子的话,那么可怜的蜗牛只有靠自己决定访问顺序来探索了。假设蜗牛走过一条边的耗费都是1,且房子遗原创 2009-11-24 16:01:00 · 1795 阅读 · 0 评论 -
pku 1163 dp TheTriangle 解题报告
一、题目:The Triangle二、题意:http://acm.pku.edu.cn/JudgeOnline/problem?id=1163三、解决办法:采用自底向上的动态规划四、源代码:#include "stdio.h"#define MAX 200int main(){//freopen("1.txt", "r", stdin);int i, j;int N;int a[M原创 2009-03-19 15:52:00 · 527 阅读 · 1 评论 -
pku 1953 dp World Cup Noise 解题报告
一、题目:World Cup Noise二、题意:http://acm.pku.edu.cn/JudgeOnline/problem?id=1953三、错误解法:即是常规的解法,搜索在数组a中取a[i]与a[i+1]是否相等而且是==1的;#include "stdio.h"#include "string.h"#define MAX 45int LCS(int a[], in原创 2009-03-19 13:52:00 · 673 阅读 · 0 评论 -
pku 1321 深搜 棋盘问题 解题报告
一、题目:棋盘问题。二、题意:http://acm.pku.edu.cn/JudgeOnline/problem?id=1321三、解决方法: 深度优先搜索。四、源代码:#include "string.h"#include "stdlib.h"#define MAX 9int n, m;int c;char Chessboard[MAX][MAX];int vi原创 2009-03-10 16:34:00 · 680 阅读 · 0 评论 -
pku1734 Floyd_Warshal算法应用 解题报告
一、题目:Sightseeing trip二、题意:给出N个旅游景点与M跳旅游路线,选择一条总路径最短且旅游景点又最多,而且是从头到尾是一条回路。三、解决办法: 此题其实是经典的Floyd_Warshal算法。四、源代码:#include "stdio.h"#include "string.h" const int n = 101;const int原创 2009-03-01 00:14:00 · 1070 阅读 · 1 评论 -
pku 2421 Prim算法 Constructing Roads解题报告
一、题目: Constructing Roads二、题意: http://acm.pku.edu.cn/JudgeOnline/problem?id=2421三、解决办法:用最小生成树Prim算法四、源代码:#include "stdio.h"#include "stdlib.h"#define N 110#define MAX 1000000int map原创 2009-02-27 13:50:00 · 1090 阅读 · 0 评论 -
pku 1961 KMP period 解题报告
一、题目:period二、题意:http://acm.pku.edu.cn/JudgeOnline/problem?id=1961三、解决办法: 赤裸裸的kmp算法四、源代码:#include "stdio.h"#include "string.h"#define MAX 1000010char s[MAX];int next[MAX];void g原创 2009-03-02 23:41:00 · 555 阅读 · 0 评论 -
动态规划的小总结:以pku1050/pku1083/pku1661为例
以前我发现自己对于动态规划这一技术思想,总是感觉难于运用!然而但我在学习近3个月的理论学习与用pku实践中,我渐渐发现动态规划其实不难!关键是自己在做题的过程中,找到该题的最忧子结构,然后在对其进行递归,那么正道题目就将很容易就解决到咯!现在我就举出自己做的三道动态规划题目进行说明:1、pku_1050_To_The_Max:#include "stdio.h"#include "stdl原创 2009-02-24 14:28:00 · 1218 阅读 · 2 评论 -
pku 1423 阶乘 Big Number 解题报告
一、题目:Big Number二、题意:求数a的阶乘的位数。三、解决办法: 此题的解决办法不难,但却有一种很好的算法思想在里面,故我需要对此做出自己的总结! 此题算属于高精度问题!我发现凡是遇到高精度的问题,其中最重要的思想在于将数值统统放到大数组上,还有一种算法思想,同时也是此题的的解法!即在计算的过程中,不断的对数值进行记录,而且还原创 2009-02-22 13:44:00 · 679 阅读 · 0 评论 -
pku 1001 高精度 Exponentiation 解题报告
一、题目: Exponentiation二、题意:求分数的幂.三、解决的方法: 对于高精度的问题,我们仍然采用经典的想法,即将数值一位一位地存储到大数组中。那么在计算的过程中,我们就一位一位的计算,先不考虑其值是否大于10;最好再处理前后的0问题与每位的进位问题.四、源代码:#include "stdio.h"#include "stdlib.h"#inclu原创 2009-02-22 13:14:00 · 2898 阅读 · 3 评论