01 2011 档案

摘要:POJ 2418 Hardwood Species算法核心 二叉查找树题目大意:通过卫星得到了某一个区域的树名,将这些树名按字典顺序输出,并输出在树的总数中所占的比例,保留小数点后四位。主要思想:对每种树做统计,并计算出所占的比例并不难。难的是如何在规定时间内按字典顺序输出输入中涉及的树名。字典顺序可以启发我们用排序的方法解决,我们可以把树名作为关键字来比较大小,而strcmp函数也给了我们比较大小提供了条件。接下来就是要解决时间问题。如果用插入排序的算法由于大量的数据需要大量的比较,就会超时。所以这里借助了比较经典的数据结构,二叉查找树。那么我们就可以先对输入建树,然后再通过树的中序遍历来输 阅读全文
posted @ 2011-01-29 15:53 AndreMouche 阅读(701) 评论(0) 推荐(0)
摘要:POJ 3281 Dining核心算法:网络最大流大意:有n头牛,F种食物,D种饮料,第i头牛喜欢fi种食物,di种饮料,编号分别为。。。 已知一头牛最多能吃一种食物和一种饮料,每种饮料 或食物最多能被一头牛吃,求以上条件下,最多能有多少头 牛能吃到他所喜爱的食物和饮料建立模型: 建立网络流模型:1.对每种食物建立从源点指向它的一条边,流量为1 2.在牛与它所喜爱的食物间建立一条边,流量为13.在牛与它所喜欢的饮料间建立一条边,流量为14.对每种饮料建立一条指向汇点的边,流量为15.在上面的基础上,将牛拆点,在拆开的点间建立一条流量为1的边 在以上条件下,从源点到汇点的最大流即为答案 模型的分 阅读全文
posted @ 2011-01-29 13:23 AndreMouche 阅读(597) 评论(0) 推荐(0)
摘要:POJ 1185 炮兵阵地核心算法:dp状态压缩中文题分析:graph[i]存储第i行的地形,用一二进制数表示,山地对应位置为1,平地对应位置为0leg[N]中存放所有能够合法的单行安排状态,用二进制数表示,驻兵对应位置为1,不驻兵对应位置为0dp[i][j][k]表示第i行状态为j,i-1行状态为k时最多的哨兵数目,j,k均对应leg[]中状态dp[i][cur][p1] = getmax(dp[i][cur][p1],dp[i-1][p1][p2]+leg[cur].army);其中: p1为第i-1层的合法行存放状态 p2为第i-2层的合法行存放状态, cur为当前即第i层合法行存放状态 阅读全文
posted @ 2011-01-28 21:01 AndreMouche 阅读(829) 评论(0) 推荐(0)
摘要:HDU 1074 Doing Homework算法核心:状态压缩DP大意:有n门课程作业,每门作业的截止时间为D,需要花费的时间为C,若作业不能按时完成,每超期1天扣1分。这n门作业按课程的字典序先后输入问完成这n门作业至少要扣多少分,并输出扣分最少的做作业顺序PS:达到扣分最少的方案有多种,请输出字典序最小的那一组方案分析:n#include#includeconstint N =65536;struct node{ int cost;//所需要的时间int pre;//前一状态int reduced;//最少损失的分数}dp[N];//dp[i][j]表示在第i天完成作业信息为jbool. 阅读全文
posted @ 2011-01-28 14:21 AndreMouche 阅读(2220) 评论(0) 推荐(0)
摘要:POJ 3254 Corn Fields算法核心:状态压缩,DP题意:输入m行n列的数字,其中为1或者是01表示土壤肥沃可以种植草地,0则不可以。在种草地的区域可以放牛,但相邻的两块区域不允许同时放牛,问有多少种放牛的方法?(不放牛也算一种情况)分析:由m,n#include#includeconstint N =1>=1; if(legal[temp]==false) { legal[i]=false;break; } if((temp&1)&&((curt&1))) { legal[i]=false; bre... 阅读全文
posted @ 2011-01-27 21:39 AndreMouche 阅读(644) 评论(0) 推荐(0)
摘要:POJ 3735 Training little cats算法核心:矩阵建模,矩阵的快速幂大意:已知有n只猫咪,开始时每只猫咪有花生米0颗,先有一组操作:由下面三个中的k个操作组成:g i 给i只猫咪一颗花生米e i 让第i只猫咪吃掉它拥有的所有花生米s i j 将猫咪i与猫咪j的拥有的花生米交换 现将上述操作做m次后,问每只猫咪有多少颗花生米?分析:因m的数据范围较大,用矩阵连乘。构建矩阵模型,peanut[N] = {0,0,。。。。0,1}:即前n个数为0,最后一个数取1matrix[N][N],初始化条件下为单位矩阵,。。。对猫咪进行操作转化为在对矩阵peanut进行操作,一组操作过程 阅读全文
posted @ 2011-01-27 19:13 AndreMouche 阅读(1450) 评论(0) 推荐(0)
摘要:POJ 1806 Manhattan 2025大意:在一个三维空间里面,有一交通工具通过一单位长度需要一升汽油,现有n升汽油,画出该交通工具在各层的运输情况 将每一层简化为一个以交通工具所在位置为中心的二维网格图,在可达网格内写入到达该网格所需要的汽油数。 自底向上画出每一层所在的二维图。 当n>9时,不需要统计Example: n = 2 时,若标记当前这一层为0层,则该情况下交通工具所能达到的层次为-2层到2层,即共5层,分别为-2,-1,0,1,2层,将每一层的二维图输出即可。题目中要求将最底层即为1,那么在该情况下,上述各层对应为第1,2,3,4,5层,其中交通工具所在的位置为第 阅读全文
posted @ 2011-01-27 12:09 AndreMouche 阅读(682) 评论(0) 推荐(1)
摘要:POJ 3756 Chess Game核心算法 dp分析:graph[i]记录在格子i处前进的步数stop[i]标记在格子i处是否停一次dp[i][j]表示第j部到达格子i的概率则 初始化下dp[0][0]=1;若已知dp[i][j],现在掷骰子得点数为k,移动到格子curto = i+k;如果格子curto处为暂停,则将当前概率加至dp[curto][i+2]处否则,curto 首先根据graph[curto]信息移动,将概率加至相应位置dp[curto][i+1]即可 ans = sum(dp[n][i]*i)(i=0,1,2,...N)PS:当ans = 0时输出Impossible!# 阅读全文
posted @ 2011-01-25 15:27 AndreMouche 阅读(418) 评论(0) 推荐(0)
摘要:POJ 1761 Easy Task大意:给你n条提交问题的信息,每条信息包含提交时间,提交队伍,提交题目编号,是否AC信息,统计这n条信息,要求输出每个问题的信息,包括题号,提交次数,平均提交次数,平均提交时间PS:1.某一队伍一旦AC了某一道题后,过后再提交该题的信息不计入统计 2.只对已经AC的队伍进行统计,即提交次数 = SUM(已AC的队伍的总共提交次数),不对未AC的队伍进行统计 分析: 1.用map存储队伍信息,编号 2.用accept[i][j]表示第j支队伍是否AC问题i 3.用actime[i][j]表示第j支队伍共提交问题i的次数 4.用node保存一个问题的信息,包括解 阅读全文
posted @ 2011-01-25 11:19 AndreMouche 阅读(490) 评论(0) 推荐(0)
摘要:核心算法:01背包解题思路: 首先按颜色对衣服进行归类,即将相同颜色的衣服放在同一类中对于某一种颜色的所有衣服所需要的最少时间,相当于将这堆衣服按时间分为两推,使得这两堆衣服所需要的时间尽可能的接近。对于每堆衣服建模: 假设当前这堆衣服一个人洗的时间为sum, 令mid = sum/2; 问题转化为,(1)有背包容量为mid,现在要从这堆衣服中选取衣服,使得总容量尽可能接近于mid 继续转化..(2)背包容量为mid,某件衣服的重量为wi,价值也为wi,计算所能达到的最大价值 dp[mid], 那么问题(2)中的dp[mid]相当于问题(1)中最接近于mid的那个容量,故原问题中这堆衣服所需要 阅读全文
posted @ 2011-01-24 22:37 AndreMouche 阅读(568) 评论(0) 推荐(0)