摘要: 【原题】Time Limit: 1sec Memory Limit:32MBDescription心宝热爱运动,喜欢爬山。一天他去道场山游玩。杭嘉湖平原多丘陵,心宝手上有一幅地图,是分层设色地形图(地图为长宽均不超过50的矩阵),心宝想算算地图上有多少个山顶他需要翻越。为了方便,地图上地势高度用小写字母'a' - 'z'表示,序号越靠前的字母表示地势越高。山顶的定义是指其东南西北四个相邻地点都没有更高的地势存在即为山顶,若有相邻的一片等高地势,则算做一个山顶,例如一幅地图如下表示:ccccccbbbccbabccbbbcccccc则显然的,地图中a点为山顶。整张 阅读全文
posted @ 2012-07-17 18:39 mrlaker 阅读(577) 评论(0) 推荐(0) 编辑
摘要: 【题意】在一个网格上,每个格子里面有不同数量的蚊子。有一只灰常卡哇伊的壁虎,她从顶行走下来,一直走到最后一行,每经过一个格子她就把那个格子里的蚊子吃掉。问能够吃掉的最大蚊子数目是多少。【思路】经鉴定为水题一条,不过体现了动态规划的思想。状态转移:到达每一个格子能够吃掉的最大蚊子数目等于左上,上,右上三个方向格子里能够吃掉的蚊子数目最大值加上该格子的蚊子数。状态转移方程:f[i][j]=MAX(f[i-1][j],f[i-1][j-1],f[i-1][j+1])+m[i][j] 1 #include<cstdio> 2 #include<memory.h> 3 #incl 阅读全文
posted @ 2012-07-17 18:22 mrlaker 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 【原题】1342. 开心的金明ConstraintsTime Limit: 1 secs, Memory Limit: 32 MBDescription金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格(都是整数元)。他希望在不超过N元(可以等于N元)的前提下,使每件物品的价 阅读全文
posted @ 2012-07-17 17:32 mrlaker 阅读(986) 评论(0) 推荐(0) 编辑
摘要: 【题意】最简单直接的0-1背包问题,输入数据个数n,背包容量m,接下来n个数据表示各个具体值,求不超过背包容量能装的最大数量。从此知道有种题叫做动态规划。 1 #include<cstdio> 2 #include<memory.h> 3 #include<algorithm> 4 using namespace std; 5 int main() 6 { 7 int testcase; 8 scanf("%d",&testcase); 9 while(testcase--)10 {11 int n,m;12 ... 阅读全文
posted @ 2012-07-17 17:26 mrlaker 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 【原题】Time Limit: 1sec Memory Limit:32MBDescription金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:主件附件电脑打印机,扫描仪书柜图书书桌台灯,文具工作椅无如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有0个、1个或2个附件。附件不再有从属于自己的附件。金明想买的东西很多,. 阅读全文
posted @ 2012-07-17 15:51 mrlaker 阅读(654) 评论(0) 推荐(0) 编辑
摘要: 【题意】给一串数,这一串数可以解码为若干英文字母的组合,比如‘1’对应‘A’,‘26’对应‘Z’,输入保证是合法的,不会出现说有解码不了的情况,求这一串数可以解释为多少种英文字母的组合。【思路】动态规划思想,如果当前字符为‘0’,则dp[i]=dp[i-2],如果当前字符不为‘0’,且与前面的数字组合能构成英文字母,那么dp[i]=dp[i-1]+dp[i-2]。这两种情况中,i=1的时候另外处理。本来不难的题目,因为和前一个字母进行判断的时候条件写错了,纠结了很久…… 1 #include<iostream> 2 #include<cstring> 3 #includ 阅读全文
posted @ 2012-07-17 15:14 mrlaker 阅读(1746) 评论(0) 推荐(0) 编辑
摘要: 【题意】有N个城市,城市之间有N-1条路(其实就是一棵树),国王想把直接连在一起的两个城市组合成一个defending unit,一个城市只能属于一个defending unit,给定一个图,求最后是否能把所有的城市都两两配对。【思路】如果说算法的话,感觉像是贪心吧。若输入的城市数目为奇数,那当然是不能配对的,直接就“No”了。用一个队列存放输入的时候邻边数目为1的点,从队头开始判断,对于队列中每一个点,将该点和该点相邻的点(t2)标记为访问过,然后将t2相邻的点中每一个t3删去t2,若删去之后邻边数为1,则把它放到队列里面。如果删去以后没有邻边了,说明该点被孤立了,也是No,全部点都访问了, 阅读全文
posted @ 2012-07-15 20:52 mrlaker 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 【题意】给定两个点相对于Hansel and Grethel的横纵坐标,以及它们与北方向的夹角[0,360),求Hansel and Grethel所在位置的坐标。【思路】根据两个参考点坐标和方向角,求出两条直线的方程,两条直线的交点就是所求的坐标。求直线方程时分斜率存在和斜率不存在两种情况,斜率存在时分(0,90]υ(270,360)和(90,180)υ(180,270]两种情况。其实两种情况应该可以合并,我看有人写的代码很短。我写的代码比较长,但是思路是比较直接的,很多功能重复的地方也就多复制几次好了。值得注意的一点就是两个double型的值相比较是不能用等于号的。以后遇到这样的题最重要的 阅读全文
posted @ 2012-07-15 20:36 mrlaker 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 【题意】输入一个数字,把它反过来输出。 1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int n; 6 cin>>n; 7 int n2 = n; 8 n = n > 0 ? n : -n; 9 int ans=0;10 while(n!=0)11 {12 ans = n%10 + ans * 10;13 n /= 10;14 }15 if(n2>0)16 cout<<ans... 阅读全文
posted @ 2012-07-15 00:18 mrlaker 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 【题意】有个车站,车站有个中转的地方,车厢可以往里面开,其实就是个栈,A方向开来一列火车,车厢序号为1……N,给出一个车厢序列B,求能不能通过这个栈,把A序列变成B序列。 1 #include<iostream> 2 #include<queue> 3 #include<stack> 4 using namespace std; 5 int main() 6 { 7 int t; 8 while(cin>>t && t!=0) 9 {10 int x;11 while(cin>>x)12 {13 ... 阅读全文
posted @ 2012-07-15 00:03 mrlaker 阅读(305) 评论(0) 推荐(0) 编辑