随笔分类 -  算法那些事儿~

算法数据结构,Acmer
摘要: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 阅读(639) 评论(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 阅读(1442) 评论(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 阅读(680) 评论(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 阅读(417) 评论(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 阅读(486) 评论(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 阅读(566) 评论(0) 推荐(0)
摘要:字典序问题 Time limit: 1000MS Memory limit: 32768K Total Submit: 574 Accepted: 193 在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26 个小写英文字母组成A={a,b,…,z}。该字母表产生的升序字符串是指字符串中字母按照从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz等字符串都是升序字符串。现在对字母表A 产生的所有长度不超过6 的升序字符串按照字典序排列并编码如下。 1 2 … 26 27 28 … a b … z ab ac …对于任.. 阅读全文
posted @ 2010-12-31 11:08 AndreMouche 阅读(1444) 评论(0) 推荐(1)
摘要:统计数字问题 Time limit: 1000MS Memory limit: 32768K Total Submit: 617 Accepted: 135 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,…,9。给定表示书的总页码的10 进制整数n (1≤n≤10^9) 。计算书的全部页码中分别用到多少次数字0,1,2,…,9。每个文件只有1 行,给出表示书的总页码的整数n。输出文件共有.. 阅读全文
posted @ 2010-12-31 11:04 AndreMouche 阅读(402) 评论(0) 推荐(0)
摘要:硬币找钱问题Time Limit:1000MS Memory Limit:65536KTotal Submit:3 Accepted:1 Description 设有6 种不同面值的硬币,各硬币的面值分别为5 分,1 角,2 角,5 角,1 元,2元。现要用这些面值的硬币来购物和找钱。购物时可以使用的各种面值的硬币个数存于数组Coins[1:6]中,商店里各面值的硬币有足够多。在1次购物中希望使用最少硬币个数。例如,1 次购物需要付款0.55 元,没有5 角的硬币,只好用2*20+10+5 共4 枚硬币来付款。如果付出1 元,找回4 角5 分,同样需要4 枚硬币。但是如果付出1.05 元(1 阅读全文
posted @ 2010-12-25 11:03 AndreMouche 阅读(4133) 评论(0) 推荐(0)
摘要:金币阵列问题问题描述:有m´ n(m#includeconstint inf =99999;constint N =101;int a[N][N],b[N][N],temp[N][N]; //a存储初始矩阵,b为目标状态矩阵int n,m;int need;//需要变换次数void ChangeL(int x,int y)//变换列{ if(x==y)return; int i; for(i=1;i<=n;i++) { int tt=temp[i][y]; temp[i][y]=temp[i][x]; temp[i][x]=tt... 阅读全文
posted @ 2010-12-24 21:45 AndreMouche 阅读(1117) 评论(0) 推荐(0)