??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧美成人久久综合中文网,7777久久久国产精品消防器材,久久久91精品国产一区二区三区 http://www.shnenglu.com/linyangfei/category/5206.html成长的\……源zh-cnThu, 25 Sep 2008 12:09:27 GMTThu, 25 Sep 2008 12:09:27 GMT60树状数组学习心得http://www.shnenglu.com/linyangfei/archive/2008/09/24/62688.html飞飞飞飞Wed, 24 Sep 2008 08:35:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/09/24/62688.htmlhttp://www.shnenglu.com/linyangfei/comments/62688.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/09/24/62688.html#Feedback0http://www.shnenglu.com/linyangfei/comments/commentRss/62688.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/62688.html阅读全文

飞飞 2008-09-24 16:35 发表评论
]]>
数学中的爆搞?/title><link>http://www.shnenglu.com/linyangfei/archive/2008/09/19/62306.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Fri, 19 Sep 2008 13:23:00 GMT</pubDate><guid>http://www.shnenglu.com/linyangfei/archive/2008/09/19/62306.html</guid><wfw:comment>http://www.shnenglu.com/linyangfei/comments/62306.html</wfw:comment><comments>http://www.shnenglu.com/linyangfei/archive/2008/09/19/62306.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/linyangfei/comments/commentRss/62306.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/linyangfei/services/trackbacks/62306.html</trackback:ping><description><![CDATA[   今天上网随便逛逛,无意间看到这些题目颇为熟悉,要是当年中学数学考试的时候能够拿电脑~程好了?br><br>1Q江市电话L?位数Q每一位上的数码可以是0Q?Q?···8Q?中Q意一个(数字可以重复出现Q如00000也算一个电话号码)Q那么这个城市最多有多少个电话号码? <br>Q?Q用0Q?Q?Q?q?个数字,可以l成多少个没有重复的4位数Q?<br>Q?Q?#8220;IMO”是国际奥林匹克的~写Q把3个字母写?U不同的颜色Q现在有5U不同的颜色W,按上q要求能写出多少U不同颜色搭配的“IMO”.<br><br>{案?span style="COLOR: #ffffff">Q?1) 100000U?nbsp;<br>              Q?Q?8U?nbsp;<br>              Q?Q?0U?br></span><br><br></cd>不过好像要比爆搞更快?#8230;…ft<img src ="http://www.shnenglu.com/linyangfei/aggbug/62306.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/linyangfei/" target="_blank">飞飞</a> 2008-09-19 21:23 <a href="http://www.shnenglu.com/linyangfei/archive/2008/09/19/62306.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最点覆盖 POJ 2060 Taxi Cab Schemehttp://www.shnenglu.com/linyangfei/archive/2008/09/15/61878.html飞飞飞飞Mon, 15 Sep 2008 11:46:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/09/15/61878.htmlhttp://www.shnenglu.com/linyangfei/comments/61878.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/09/15/61878.html#Feedback0http://www.shnenglu.com/linyangfei/comments/commentRss/61878.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/61878.htmlTaxi Cab Scheme

Time Limit: 1000MS

 

Memory Limit: 30000K

Total Submissions: 1342

 

Accepted: 587

Description

Running a taxi station is not all that simple. Apart from the obvious demand for a centralised coordination of the cabs in order to pick up the customers calling to get a cab as soon as possible,there is also a need to schedule all the taxi rides which have been booked in advance.Given a list of all booked taxi rides for the next day, you want to minimise the number of cabs needed to carry out all of the rides.
For the sake of simplicity, we model a city as a rectangular grid. An address in the city is denoted by two integers: the street and avenue number. The time needed to get from the address a, b to c, d by taxi is |a - c| + |b - d| minutes. A cab may carry out a booked ride if it is its first ride of the day, or if it can get to the source address of the new ride from its latest,at least one minute before the new ride's scheduled departure. Note that some rides may end after midnight.

Input

On the first line of the input is a single positive integer N, telling the number of test scenarios to follow. Each scenario begins with a line containing an integer M, 0 < M < 500, being the number of booked taxi rides. The following M lines contain the rides. Each ride is described by a departure time on the format hh:mm (ranging from 00:00 to 23:59), two integers a b that are the coordinates of the source address and two integers c d that are the coordinates of the destination address. All coordinates are at least 0 and strictly smaller than 200. The booked rides in each scenario are sorted in order of increasing departure time.

Output

For each scenario, output one line containing the minimum number of cabs required to carry out all the booked taxi rides.

Sample Input

2
2
08:00 10 11 9 16
08:07 9 16 10 11
2
08:00 10 11 9 16
08:06 9 16 10 11

Sample Output

1
2

Source

Northwestern Europe 2004

 

 

       Ҏq道题目的意思,我们可以Z张图Q对于两?/span>booked taxi rideQ?/span>ri?/span>rj如果一辆R能够先完?/span>ri的Q务再有时间赶d?/span>rj的Q务,那么徏立一?/span>ri指向rj的边?br>

       按照题目的要求,要选择最的taxi来完成这些Q务。显然在上面q个例子中,需要安?/span>2?/span>taxi。结合这个图Q可以把题目的要求{化ؓ扑և最的路径条数Q得这些\径覆盖途中所有的边,例如可以选择2条\?/span>1->3->4?/span>1->2可以覆盖所有的辏V也可以选择1->3->4?/span>2Q因?/span>2作ؓ初始站,不需要由1转移q来Q。对于一条连l的路径vi1->vi2->…vik׃q条路径上的d实际上是׃?/span>taxi来完成的Q可以吧q条路径退化成两个?/span>vi1->vik。有了这两步建图的步骤以后,问题的求解就可以变ؓ扑և点集的一个最子集,使这个顶点子集覆盖所有的边(每条辚w臛_和一个顶炚w的顶点相q)。这个问题就是图的最点覆盖。再看这张图Q还有一些性质能够让我们更好地求出最点覆盖。这个图是一个有向无环图Q没有自环,可以拆点,把原先徏的图变成一张二分图?br>

可以再图中看出,上面丑և的一条\?/span>1->3->4对应了这个二分图中的路径1->3’->3->4’Q在q个二分图中需要求一个最大独立子集(q里?/span>4点就是一条\径的l点Q没一条\径即对应有一个终点!Q。二分图的最大独立数是ȝC最大匹配数的差倹{接下来建图Q拆点,求二分图最大匹配就能解册道题目了?br>




飞飞 2008-09-15 19:46 发表评论
]]>
从希望走向失?/title><link>http://www.shnenglu.com/linyangfei/archive/2008/08/29/60388.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Fri, 29 Aug 2008 10:43:00 GMT</pubDate><guid>http://www.shnenglu.com/linyangfei/archive/2008/08/29/60388.html</guid><wfw:comment>http://www.shnenglu.com/linyangfei/comments/60388.html</wfw:comment><comments>http://www.shnenglu.com/linyangfei/archive/2008/08/29/60388.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.shnenglu.com/linyangfei/comments/commentRss/60388.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/linyangfei/services/trackbacks/60388.html</trackback:ping><description><![CDATA[<p>   今早上完“计算机图形图?#8221;译֐Q我q个学期唯一的希望都破灭了(q学期得睡过MQ。我一直都?/p> <p>?#8220;计算机图形学”?#8220;计算机图像处?#8221;是两门很有意思的评。这学期我们的课E安排还是一贯作?/p> <p>——课E压~,把这两门评压成了一门课E,不仅如此q用的是内部教材(传说中的内部教材是?/p> <p>评内容q一步精压羃Q。即便在q种情况之下Q我q是对计机囑Ş囑փ处理充满热情Q想多学些东</p> <p>西,好好地做评设计。今天下课前,老师把课E设计的题目布置下来Q真令我d失望了。布|了20+</p> <p>个题目,虽说涉及一些军事,但是要求真的很水。后面给Z一pd军事电媄Q灾隄影大片,做法是</p> <p>Q?br>1、看片;<br>2、截图与PSQ?br>3、写报告与做ppt?br>   我想了一下,q里面可能一点理论,一点编E都不会涉及刎ͼq样的课E设计,玩过电脑的h都会做,q?/p> <p>q嘛d“信息工程”专业?#8220;评设计”里呢Q真是可W!Q!评都羃水羃到这U程度了Q那q开什</p> <p>么课呢,自欺Zh|了。稍有点本专业知识的Z不至于会认ؓ计算机图像处理就是玩PS吧。那大学里学</p> <p>电子工程的毕业后都去修微波炉Q通信工程的去卖电话卡Q信息工E的去照相馆做PS好了?br>?#8230;…q几天正是新生入学,q看着一批一批的新生往我们宿舍q边赎ͼ我心里真是难q,真想跟他们说</p> <p>Q?#8220;回去吧,说不定来q还能考个清华?#8221;q有那么多家长,送个孩子上大学多不容易,但也总们还不知道,他们的儿子要接受q样的教肌Ӏ想着q些事,心都在痛啊?br>   ?#8230;…</p><img src ="http://www.shnenglu.com/linyangfei/aggbug/60388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/linyangfei/" target="_blank">飞飞</a> 2008-08-29 18:43 <a href="http://www.shnenglu.com/linyangfei/archive/2008/08/29/60388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ 1112 Team Them Up! 求补图,q通分量,DPhttp://www.shnenglu.com/linyangfei/archive/2008/08/08/58295.html飞飞飞飞Thu, 07 Aug 2008 16:51:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/08/08/58295.htmlhttp://www.shnenglu.com/linyangfei/comments/58295.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/08/08/58295.html#Feedback1http://www.shnenglu.com/linyangfei/comments/commentRss/58295.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/58295.html阅读全文

飞飞 2008-08-08 00:51 发表评论
]]>
个h比赛时心理素质不?/title><link>http://www.shnenglu.com/linyangfei/archive/2008/08/04/57989.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Mon, 04 Aug 2008 10:33:00 GMT</pubDate><guid>http://www.shnenglu.com/linyangfei/archive/2008/08/04/57989.html</guid><wfw:comment>http://www.shnenglu.com/linyangfei/comments/57989.html</wfw:comment><comments>http://www.shnenglu.com/linyangfei/archive/2008/08/04/57989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/linyangfei/comments/commentRss/57989.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/linyangfei/services/trackbacks/57989.html</trackback:ping><description><![CDATA[  <a >http://acm.tju.edu.cn/toj/vcontest/contest1688.html</a> <br>  今天做level 1的比赛就做了一道trie的题目。后来一直被困在G题上面,我一直以为G题有状态压~DP的方法,没有去惛_他的Ҏ了。就一直在Gd@环。但赛后跟大牛们一交流Q原来这题是爆搞Q复杂度6^8。就׃10分钟把这题切了。反思今天的比赛Q其实当时如果自己尝试别的方法,׃会一直困在这里。特别是看到别hq题的时候自己没q题Q心里反倒是来紧张,到后面就很不爽了。脑子里也很乱,自己都调整不q来。还有今天比赛的题目都没读,实在是不应该?img src ="http://www.shnenglu.com/linyangfei/aggbug/57989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/linyangfei/" target="_blank">飞飞</a> 2008-08-04 18:33 <a href="http://www.shnenglu.com/linyangfei/archive/2008/08/04/57989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POJ 2047http://www.shnenglu.com/linyangfei/archive/2008/08/02/57811.html飞飞飞飞Sat, 02 Aug 2008 03:18:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/08/02/57811.htmlhttp://www.shnenglu.com/linyangfei/comments/57811.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/08/02/57811.html#Feedback0http://www.shnenglu.com/linyangfei/comments/commentRss/57811.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/57811.htmlConcert Hall Scheduling
Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 574 Accepted: 229

Description

You are appointed director of a famous concert hall, to save it from bankruptcy. The hall is very popular, and receives many requests to use its two fine rooms, but unfortunately the previous director was not very efficient, and it has been losing money for many years. The two rooms are of the same size and arrangement. Therefore, each applicant wishing to hold a concert asks for a room without specifying which. Each room can be used for only one concert per day.
In order to make more money, you have decided to abandon the previous fixed price policy, and rather let applicants specify the price they are ready to pay. Each application shall specify a period [i, j] and an asking price w, where i and j are respectively the first and last days of the period (1 <= i <= j <= 365), and w is a positive integer in yen, indicating the amount the applicant is willing to pay to use a room for the whole period.

You have received applications for the next year, and you should now choose the applications you will accept. Each application should be either accepted for its whole period or completely rejected. Each concert should use the same room during the whole applied period.

Considering the dire economic situation of the concert hall, artistic quality is to be ignored, and you should just try to maximize the total income for the whole year by accepting the most profitable applications.

Input

The input has multiple data sets, each starting with a line consisting of a single integer n, the number of applications in the data set. Then, it is followed by n lines, each of which represents one application with a period [i, j] and an asking price w yen in the following format.

i j w

A line containing a single zero indicates the end of the input.

The maximum number of applications in a data set is one thousand, and the maximum asking price is one million yen.

Output

For each data set, print a single line containing an integer, the maximum total income in yen for the data set.

Sample Input

4
1 2 10
2 3 10
3 3 10
1 3 10
6
1 20 1000
3 25 10000
5 15 5000
22 300 5500
10 295 9000
7 7 6000
8
32 251 2261
123 281 1339
211 235 5641
162 217 7273
22 139 7851
194 198 9190
119 274 878
122 173 8640
0

Sample Output

30
25500
38595

Source

 
    q道题目放了很久了,一直没惛_好的解法。最q的几次比赛中都遇到了这道题Q比赛后才把q题搞定。这题的Ҏ是DP。输入数据记录要处理一下,开一?66大的vector数组Q记录了到第e天结束时的音乐会的开始时间s和收益w。开一个dp[366][366]的数l,其中dp[i][j]表示W一个音乐厅在第i天,W二个音乐厅在第j天收到的yen。因为预定的音乐会占用音乐厅是有一个区间的Q这里做一个处理,是在一场音乐会占用的期间都不收钱,直到一个音乐会完全l束后才攉。另外两个音乐厅是一LQ即最后dp[i][j]应该是一个对U数l,当只接受一场音乐会的情况可以强行的认ؓq场音乐会是攑֜W一个音乐厅Q计dp[i][j]中所有i>j的|最后再令dp[j][i]=dp[i][j]卛_?br>
 1for(i=1; i<=365; i++)
 2        {
 3            for(jj=0; jj<hall[i].size(); jj++)
 4            {
 5                for(j=0; j<i; j++)
 6                {
 7                    dp[i][j]=Max(dp[i][j],dp[hall[i][jj].s-1][j]+hall[i][jj].w);
 8                }

 9                for(ii=jj+1; ii<hall[i].size(); ii++)
10                {
11                    dp[i][i]=Max(dp[i][i],dp[hall[i][jj].s-1][hall[i][ii].s-1]+
12                        hall[i][jj].w+hall[i][ii].w);
13                }

14            }

15            for(j=1; j<=i; j++)
16            {
17                dp[i][j]=Max(dp[i-1][j],dp[i][j]);
18                dp[i][j]=Max(dp[i][j-1],dp[i][j]);
19                dp[j][i]=dp[i][j];
20            }

21        }


飞飞 2008-08-02 11:18 发表评论
]]>
7?6-7?1荒废的一周!Q!http://www.shnenglu.com/linyangfei/archive/2008/07/20/56710.html飞飞飞飞Sun, 20 Jul 2008 15:13:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/07/20/56710.htmlhttp://www.shnenglu.com/linyangfei/comments/56710.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/07/20/56710.html#Feedback2http://www.shnenglu.com/linyangfei/comments/commentRss/56710.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/56710.html    一周都没有好好的做题。又C学校的网l跟千年老乌龟似的慢Q上个poj要等?分钟Q做比赛q种速度搞得一炚w不爽。这周同学来长沙Q所以我原来做题的计划全被打乱,不过倒是逛了长沙好多地方Q呵呵(来长沙三q_W一ơ这样了解长沙)。暑假留在长沙又不是留在q玩的,下周同学p了,希望自己能够调整好状态,用这20天的旉好好冲一把,加aQ加油!



飞飞 2008-07-20 23:13 发表评论
]]>
POJ 2335 点数的gcdhttp://www.shnenglu.com/linyangfei/archive/2008/06/28/54874.html飞飞飞飞Sat, 28 Jun 2008 07:18:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/06/28/54874.htmlhttp://www.shnenglu.com/linyangfei/comments/54874.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/06/28/54874.html#Feedback1http://www.shnenglu.com/linyangfei/comments/commentRss/54874.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/54874.htmlTemple of Dune
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 211 Accepted: 82

Description

The Archaeologists of the Current Millenium (ACM) now and then discover ancient artifacts located at the vertices of regular polygons. In general it is necessary to move one sand dune to uncover each artifact. After discovering three artifacts, the archaeologists wish to compute the minimum number of dunes that must be moved to uncover all of them.

Input

The first line of input contains a positive integer n, the number of test cases. Each test case consists of three pairs of real numbers giving the x and y coordinates of three vertices from a regular polygon.

Output

For each line of input, output a single integer stating the fewest vertices that such a polygon might have. You may assume that each input case gives three distinct vertices of a regular polygon with at most 200 vertices.

Sample Input

4
10.00000 0.00000 0.00000 -10.00000 -10.00000 0.00000
22.23086 0.42320 -4.87328 11.92822 1.76914 27.57680
156.71567 -13.63236 139.03195 -22.04236 137.96925 -11.70517
129.400249 -44.695226 122.278798 -53.696996 44.828427 -83.507917

Sample Output

4
6
23
100

Source



题目大意是给Z个点?x,y)坐标Q要求输Z个边数最的正多边Ş的边敎ͼ使这三个Ҏ好在

q个正多边Ş上面。其实这个三角Ş和这个正多边形是共外接圆Q由外接圆的圆心出发Q三角Ş的三

条边可以把圆分成三䆾Q每份圆弧所对应的圆心角分别为arg[0],arg[1]和arg[2]Q正多边形把圆弧

分成相等的n份,每䆾对应的圆心角?*pi/n。其实三角Ş的三个角分别占用了若干{䆾正多边Ş

所划分的圆弧,最后也只要求arg[0],arg[1],arg[2]?*pi的最大公U数(gcd)卛_。但是这里是

个角度都是QҎQ所以还定义一个QҎ的gcdQ计QҎ的gcd可以利用math.h的函数fmod

(x,y)表示x%y。例?.5%0.3=0.2Qx%y的结果ؓ不超qy的一个QҎ。下面写了一个fmod(x,y)自己

的实现?br>double fmod(double x, double y)
{
 return x-floor(x/y)*y;
}
有了fmod函数以后Q就可以用它来求gcd了!
double fgcd(double a, double b)
{
 double t;
 if(dblcmp(a-b) == 1)  //a>b
 {
  t=a;
  a=b;
  b=t;
 }
 if(dblcmp(a) == 0) return b;
 return fgcd(fmod(b,a),a);
}



飞飞 2008-06-28 15:18 发表评论
]]>
Written to alpcs in Normalhttp://www.shnenglu.com/linyangfei/archive/2008/06/18/53935.html飞飞飞飞Wed, 18 Jun 2008 14:50:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/06/18/53935.htmlhttp://www.shnenglu.com/linyangfei/comments/53935.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/06/18/53935.html#Feedback3http://www.shnenglu.com/linyangfei/comments/commentRss/53935.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/53935.html   Last night alpc40 received a message and he told me sadly that two alpcs are eliminated from Normal, and he wasn’t willing to face up to the cruel reality. Actually the competition in alpcs also in ICPC is so fierce that every ACMers must do their best to improve themselves and to fight in every contest. Although it is so hard, I think that is why this contest attracts so many excellent programmers to join in the contest. I am sorry to hear that someone of you will lose your chances after these contests, but I want to remind you that every one no matter in Seed or Normal makes great effort. And you must realize that you are not as powerful as that Big Cows now. Someone who loses your chance does not mean that you lose all your chances in ICPC . If you really love it and want to do it, I think you mustn’t give it up. Because most of you are Sophomore or even freshmen, you still have many chances if and only if you work harder and learn more. ICPC is open to every body, and hope all of you will enjoy this game.



飞飞 2008-06-18 22:50 发表评论
]]>
湖大邀误ȝhttp://www.shnenglu.com/linyangfei/archive/2008/05/26/51161.html飞飞飞飞Mon, 26 May 2008 10:00:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/05/26/51161.htmlhttp://www.shnenglu.com/linyangfei/comments/51161.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/05/26/51161.html#Feedback0http://www.shnenglu.com/linyangfei/comments/commentRss/51161.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/51161.html       q次L大是?/span>alpc62q有alpc07一l,在赛前进行的两次淘汰赛中Q我们组的表现就非常不好Q最后一名。先前组l的两次淘汰赛中Q我觉得我们׃直没有分好题Q比赛中׃个劲地钻到难题上Q也没有认真地考虑其他可以AC掉的题目Q比赛一开始就陷入其中Q难题不能够很快ACQ就一直停留在一个题上面Q很久过后才开始跟题,所以造成了很被动的局面?/span>

       今天L大我认ؓp避免我们l再出现q种情况Q一定要读题Q要多想题!大清早坐校R一路风光的C湖大Q长沙今天搞火炬传递预演,人很多,l果校R无视旁h地开了过去)。离比赛q有一个多时的时间。这?/span>alpc62跟我_他今天的状态不好,昨晚?/span>topcoder做到很晚才睡。于是找了个地方大睡一阵,醒来后就_饱满的说今天可以敲题了?/span>

       题目印刷地很乱,分题的时候就个h撕了1/3的题目?/span>Alpc62先拿CAQ用一?/span>log函数q掉了。然后我看题Q发C个中文字W串DP题,我觉得可以做Q就?/span>62说题了?/span>62大敲一阵,我就一直在N目中?/span>trickQ因为我感觉q道题有很多没说清楚的地方,不久E序写完Q没出样例,然后我们开始检查,发现题目中有一个错误,于是pȝ上看,我的天啊Q网上的描q和我们手上拿到的题目差了这么多Q按?/span>clarification上说的一切以|页上的为准Q于是我们对着|页上的题,q了样例Q一交是WAQ提交了打印代码Q于?/span>62觉得要换题。这?/span>alpc07M一道猜数字的题Q我们判断是弱题Q简单暴搞就行?/span>Alpc07上去Ԍl果WAQ这下搞得郁闷了。不我们又换题Q我又读了全场最多hq的一道题Q我开始还在想DPQ跟alpc62说了以后Q他毫不犹U地说Q?/span>dijkstra嘛,是全q成都热w赛的原题。很快就1A了,q了q时alpc62的h品就暴了Q在吸取了前面的教训后,我们打开|页Q认真读了上面的题,发现alpc07敲的那到题是因ؓd的时候错了,d以一个非正数l束Q而不是以Q?/span>1l束Q这ơ比赛题目真的很?/span>bugQ。于是我们又瞬过了一题。接下来3题做得都很顺Q都?/span>alpc62l?/span>1A了。最Ȁ动的是我?/span>A?/span>6道题以后Q开?/span>WA掉的中文字符?/span>DP题被rejudge了,l果alpc62的程序还?/span>1A。题目数瞬间涨C7题。这时我们还有一道博弈和q连看模拟题Q博弈我推了半天公式Q都?/span>WAQ其实我到现在都搞不清楚博弈的原?#8230;…q连看模拟题Q我觉得自己可以做,但是׃题目没有描述清楚Q我有很多细节的地方没有考虑清楚Q没敌Ӏ最后一个小时的旉是alpc62?/span>alpc07两个人在?/span>RSA。写了好久,快到比赛l束了,alpc62发现自己没有带模版了Q最后这道题没出Q比赛结束,我们?/span>7道题?/span>

       今天在比赛中Q我基本上没有敲题,在组里面协调分题Q注意场上的形势。就在这ơ的比赛中我觉得读题对于一个队伍来说很重要。特别是惌?/span>1AQ?/span>1A的时候可以鼓舞队伍的士气Q也不会让大家被一道题目给~住。另外也可以节省很多旉Q过题以后,可以抛弃好多的负担,全力投入C一道题目中厅R对于今天比赛这L题目Q读题是关键。题目不是很隄情况下,在读题中可以发现很多Ҏ卡时的细节。比如输入输出格式,数据范围Q题目中冗长的废话,Ҏ情况的说?#8230;…q些都是在敲题的时候要注意的。读题读不好在前两次比赛中都吃了很大的亏Q今天自认ؓ读题的情况还不错Q比赛中间的那段也做得很利。除此之外,今天在比赛中我的收获q有是?/span>alpc62大牛敲题Q我觉得他在敲题的时候思\很清楚,脑子惛_很快。感觉他敲题的时候就专心的熔入到题目之中了,思维一直都很连贯,而且对自׃码的N能力很强。我觉得q些也是我要在以后的l习中要加强的?/span>



飞飞 2008-05-26 18:00 发表评论
]]>
树ŞDP PKU 1947 Rebuilding Roadshttp://www.shnenglu.com/linyangfei/archive/2008/05/05/48913.html飞飞飞飞Mon, 05 May 2008 09:38:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/05/05/48913.htmlhttp://www.shnenglu.com/linyangfei/comments/48913.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/05/05/48913.html#Feedback0http://www.shnenglu.com/linyangfei/comments/commentRss/48913.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/48913.htmlRebuilding Roads
Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 1146 Accepted: 390

Description

The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, number 1..N) after the terrible earthquake last May. The cows didn't have time to rebuild any extra roads, so now there is exactly one way to get from any given barn to any other barn. Thus, the farm transportation system can be represented as a tree.

Farmer John wants to know how much damage another earthquake could do. He wants to know the minimum number of roads whose destruction would isolate a subtree of exactly P (1 <= P <= N) barns from the rest of the barns.

Input

* Line 1: Two integers, N and P

* Lines 2..N: N-1 lines, each with two integers I and J. Node I is node J's parent in the tree of roads.

Output

A single line containing the integer that is the minimum number of roads that need to be destroyed for a subtree of P nodes to be isolated.

Sample Input

11 6
1 2
1 3
1 4
1 5
2 6
2 7
2 8
4 9
4 10
4 11

Sample Output

2

Hint

[A subtree with nodes (1, 2, 3, 6, 7, 8) will become isolated if roads 1-4 and 1-5 are destroyed.]

Source



    题目l出了一个树节点CؓnQ要求去掉最的边,得出一个子树,使得q个子树的节Ҏ为m?br>    首先q是一|ҎQQ意一个节炚w可以作ؓ栏V这里就?可点ؓ栏V考虑除根节点外,树中的每一个节炏V一U情冉|在dfsӞ该节点脱d的父节点Q由它和它的子节点共同组成一子树,q样要把边删掉;另一U情冉|保持该节点与其父节点的连接,不要删边。在做dfs的时候,对于当前节点vQ计所有子节点产生的dp倹{dp[i][j]表示Wi个节点ؓ根,生成节点Cؓj的子树所需要删掉的最边的条数。最后还要注意整颗树的根节点因ؓ它没有父节点Q所以不用计删除的辏V?br>    dfs做dp的过E如下:
 1void search(int v)
 2{
 3    int i,j,k,t;
 4    mark[v]=true;
 5    dp[v][0]=1;
 6    dp[v][num[v]]=0;
 7    for(i=1; i<=n; i++)
 8    {
 9        if(g[v][i] && !mark[i])
10        {
11            search(i);
12            for(j=1; j<=num[v]; j++)
13            {
14                if(dp[v][j] != INF)
15                {
16                    for(k=0; k<=num[i]; k++)
17                    {
18                        if(dp[i][k] != INF)
19                        {
20                            t=dp[v][j-(num[i]-k)];
21                            dp[v][j-(num[i]-k)]=Min(t,dp[v][j]+dp[i][k]);
22                        }

23                    }

24                }

25            }

26        }

27    }

28}

29
30int main()
31{
32    int i,j,a,b;
33    //freopen("in.txt","r",stdin);
34    scanf("%d%d",&n,&m);
35    memset(g,false,sizeof(g));
36    memset(num,0,sizeof(num));
37    for(i=1; i<=n; i++)
38        for(j=1; j<=n; j++)
39            dp[i][j]=INF;
40    for(i=1; i<n; i++)
41    {
42        scanf("%d%d",&a,&b);
43        g[a][b]=g[b][a]=true;
44    }

45    memset(mark,false,sizeof(mark));
46    dfs(1);
47    memset(mark,false,sizeof(mark));
48    search(1);
49    a=INF;
50    for(i=1; i<=n; i++)
51    {
52        //for(j=1; j<=num[i]; j++)
53        //{
54            b=dp[i][m];
55            if(i != 1)
56                b++;
57            if(b < a)
58                a=b;
59        //}
60    }

61    printf("%d\n",a);
62    return 0;
63}


飞飞 2008-05-05 17:38 发表评论
]]>
中南赛结束了http://www.shnenglu.com/linyangfei/archive/2008/04/30/48532.html飞飞飞飞Wed, 30 Apr 2008 09:34:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/04/30/48532.htmlhttp://www.shnenglu.com/linyangfei/comments/48532.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/04/30/48532.html#Feedback2http://www.shnenglu.com/linyangfei/comments/commentRss/48532.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/48532.html    中南赛结束了Q结果出乎意料。大家在Z都没发挥好。我们组是alpc T8Q比赛开?/p>

的时候分题,我读DEFQ很快我发CE是一道水题,上手敲Q测试了几个数据之后?/p>

submit了。遗憑֕Q这是我们l这场比赛唯一的一?/Y。在中南赛前夜,我还在想有尽

量多?/YQ一上场q么快就水过了一道题Q我q以Z天的题目很简单。当时的心情那个

Ȁ动啊……q题后我又立马读D题,看v来很像一道模拟题Q我自信地认题跟E一P

马上又开始敲代码Q敲着敲着发C对了Q数据量辑ֈ?00000Q暴搞的话会时Q我

意识到这道题不光是纯_的模拟Q应该要借助于些数据l构的了。我们组放慢了脚步?/p>

alpc40和alpc43仍在读题Q接着alpc40跟我讲C题,700个点中选出三个点,使得q三个点

定的外接圆半径最大。O(n^3)的时间会时Q于是我又一ơ不加思烦地说“H包”Q兴

致勃勃地敲了个突包,l果WA。打C码,以ؓ是我的突包错了,再改Q再WA。这时已l?/p>

两个多小时过MQ我们还是一个气球。一ơ次的WA让我冷静下来惻I问题没这么简单,

后来讨论发现先求H包Q再枚D点的Ҏ是错的。做了两个多时的算法从Ҏ上是错的

Q当时我预感到比赛后的l果了。最后敲了个O(n^3)的暴搞,TLE。此时我已经攑ּ了?/p>

比赛中作Z个主力,我觉得我的表现实在是太差了,没有认真地讨论和分析敲题,?/p>

部分旉占用着键盘Q以致于alpc43整场比赛都没有碰到键盘。组队赛变成了我的个

Qƈ没有发挥三个人的合力。特别是C最?5分钟Q变成了垃圾旉Q没题可做了Q我

们开始边吃汉堡,边刷rank list……
    ȝq次比赛Q首先是我,Z的经验还不。比如在q次比赛中场上出C没题?/p>

Q算法错误等致命的情冉|Q我完全׃能控制这L局面,冲动Q?gt;p->攑ּQ在l队

赛中很忌讛_现这L情Ş。比赛的时候和qx做题都不一P当时脑子很混ؕQ再?/p>

没心思想其他的题目了。另外也是自q实力原因Q对题目把握得不好。对于我们组Q我

觉得互相的交和讨论q有待改q,有时说题意,Ҏ很难领会Q比赛中的讨Z没出?/p>

有意义的亮点?br>    alpcs都在好好地反思反思再反?#8230;…也许l我自己的机会ƈ不多Q认真做好每一场比

赛,每场比赛都要有收莗?/p>

飞飞 2008-04-30 17:34 发表评论
]]>
中南赛前?/title><link>http://www.shnenglu.com/linyangfei/archive/2008/04/26/48204.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sat, 26 Apr 2008 13:01:00 GMT</pubDate><guid>http://www.shnenglu.com/linyangfei/archive/2008/04/26/48204.html</guid><wfw:comment>http://www.shnenglu.com/linyangfei/comments/48204.html</wfw:comment><comments>http://www.shnenglu.com/linyangfei/archive/2008/04/26/48204.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/linyangfei/comments/commentRss/48204.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/linyangfei/services/trackbacks/48204.html</trackback:ping><description><![CDATA[<p>    明天是中南赛了Q去q选了十组Q因为当时自己实力太菜,没有Z能够参加。经</p> <p>q了一q的努力Q今q取得了q个Z。和我同l的q有alpc40和alpc43。我们^时还?/p> <p>比较了解了。alpc40和我是一个宿舍的Q^时做题的交流也比较多Q我们两写程序的风格</p> <p>也差不多Q一个老师教的嘛^_^Q。我觉得alpc40在做数学题,找规律的题目时还是很快能</p> <p>扑ֈҎ的,在比赛的时候,他比较喜Ƣ自己出数据Q敲完题后L不断地出数据来检?/p> <p>自己的程序,在校赛中qZQ虽然他交题的时间不是最早的Q因Z一直在出数据测</p> <p>试自qE序Q一直测到自p为没有问题了Q才提交Q很大概率出1/Y的。所以尽交?/p> <p>不快Q但因错得少Q罚时少Q校赛时在同样题目数的h中还是排在了前面。我觉得q点?/p> <p>常好Q在明天的比赛中Q我们首先要求稳。我觉得我们的实力绝对不至于强到把所有的?/p> <p>目都做出来,也不见得会比别h多出题,所以在很多同样题目数的ZQ还是要拼罚时的</p> <p>。这需要在比赛中做的稳Q争取尽量多?/Y。我也要克服qx比较急躁的习惯,切忌?/p> <p>要一出样例就交,回顾一下自qE序Q测试一下数据,查找错误。这两次比赛看了</p> <p>alpc43的代码,我觉得他的代码实在是很ؕQ很多羃q,换行都用得不规范Q写E序的时</p> <p>候容易造成思\不清晎ͼ在检查程序的时候也很难发现错误Q会费很多旉。我觉得?/p> <p>赛中Q给alpc43做些代码量不大,但是思\能够出来得比较清晰的题目。至于我Q我觉得</p> <p>应该担v大量的代码Q务,在组里,我的代码速度q可以。可以写点代码量大的模拟题,</p> <p>量快地ACQ好为我们组节省旉。另外,一些设计算法,数据l构的题目(|络,?/p> <p>分图Q高_ֺQ线D|Q计几何等Q,我也要敲Ԍ争取能冲出更多的题?br>    从今天的热n赛来看,我的状态一炚w不好。可能是q个星期Q又要做题,又要考试</p> <p>Q还要组l数据库的复习,有点搞得太篏了。就写这么点了,今晚休息好点Q但愿明天能</p> <p>保持最佳的状态^_^</p><img src ="http://www.shnenglu.com/linyangfei/aggbug/48204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/linyangfei/" target="_blank">飞飞</a> 2008-04-26 21:01 <a href="http://www.shnenglu.com/linyangfei/archive/2008/04/26/48204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不用IDE的结?/title><link>http://www.shnenglu.com/linyangfei/archive/2008/04/21/47757.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Mon, 21 Apr 2008 12:19:00 GMT</pubDate><guid>http://www.shnenglu.com/linyangfei/archive/2008/04/21/47757.html</guid><wfw:comment>http://www.shnenglu.com/linyangfei/comments/47757.html</wfw:comment><comments>http://www.shnenglu.com/linyangfei/archive/2008/04/21/47757.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.shnenglu.com/linyangfei/comments/commentRss/47757.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/linyangfei/services/trackbacks/47757.html</trackback:ping><description><![CDATA[<div id="pbffhff" class=ptt lang=en-US>   现在改用UltraEdit敲题Qg++~译。好不适应Q因为没了VC的调试功能,也没有了IDE弹出代码的功能。自己敲Q错了要自己查。今天敲题就吃了亏,判断一个字W要在p-z之间Q结果我写成了q-zQ造成了无的WA……后来q是忍不住,在VC的帮助下AC的。不用VC的日子,q道题还真不Ҏ啊。所以现在都没有勇气挑战3KB Code 的代码了。MQ自p要慢慢适应Q还要一点点q步?/div><img src ="http://www.shnenglu.com/linyangfei/aggbug/47757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/linyangfei/" target="_blank">飞飞</a> 2008-04-21 20:19 <a href="http://www.shnenglu.com/linyangfei/archive/2008/04/21/47757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>q代加深搜烦http://www.shnenglu.com/linyangfei/archive/2008/04/20/47664.html飞飞飞飞Sun, 20 Apr 2008 07:44:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/04/20/47664.htmlhttp://www.shnenglu.com/linyangfei/comments/47664.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/04/20/47664.html#Feedback1http://www.shnenglu.com/linyangfei/comments/commentRss/47664.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/47664.htmlThe Rotation Game

Time Limit: 15000MS

 

Memory Limit: 150000K

Total Submissions: 944

 

Accepted: 218

Description

The rotation game uses a # shaped board, which can hold 24 pieces of square blocks (see Fig.1). The blocks are marked with symbols 1, 2 and 3, with exactly 8 pieces of each kind.


Initially, the blocks are placed on the board randomly. Your task is to move the blocks so that the eight blocks placed in the center square have the same symbol marked. There is only one type of valid move, which is to rotate one of the four lines, each consisting of seven blocks. That is, six blocks in the line are moved towards the head by one block and the head block is moved to the end of the line. The eight possible moves are marked with capital letters A to H. Figure 1 illustrates two consecutive moves, move A and move C from some initial configuration.

Input

The input consists of no more than 30 test cases. Each test case has only one line that contains 24 numbers, which are the symbols of the blocks in the initial configuration. The rows of blocks are listed from top to bottom. For each row the blocks are listed from left to right. The numbers are separated by spaces. For example, the first test case in the sample input corresponds to the initial configuration in Fig.1. There are no blank lines between cases. There is a line containing a single `0' after the last test case that ends the input.

Output

For each test case, you must output two lines. The first line contains all the moves needed to reach the final configuration. Each move is a letter, ranging from `A' to `H', and there should not be any spaces between the letters in the line. If no moves are needed, output `No moves needed' instead. In the second line, you must output the symbol of the blocks in the center square after these moves. If there are several possible solutions, you must output the one that uses the least number of moves. If there is still more than one possible solution, you must output the solution that is smallest in dictionary order for the letters of the moves. There is no need to output blank lines between cases.

Sample Input

1 1 1 1 3 2 3 2 3 1 3 2 2 3 1 2 2 2 3 1 2 1 3 3
1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3
0

Sample Output

AC
2
DDHH
2

Source

Shanghai 2004

 

 

图中?/span>#字格?/span>4条竖U,可以?/span>8个方向倒{里面的数字方块,当中间的8个数字方块是同一个数字时Q游戏结束。这道题p求搜索一个最短\径,倒{8个方向得中?/span>8个数字相{。这道题目看h很像一道单U的BFSQ看?/span>POJ里面?/span>BFS会爆内存Q我没试Q估计写得好的也爆不了。但是估计写BFSq要涉及到状态的判重Q程序写h也不方便。我用了q代加深的搜索方法。第一ơ接触这个算法,我说一下我的理解:

       原来我很不理解P代加深,搜烦的深度一层一层地加,在后面的某一深度限制下搜索,必定会搜到前面深度所能搜到的l果Q这会造成重复搜烦。基于这点,我一直都认ؓq代加深搜烦的方法很冗余Q当然也是自׃来都没有动手试过。像q道题就l我的收获不,有的时候选择一定的{略q行搜烦Q我们是很难定解所在状态空间的深度的,有时可能解的深度不大Q但整个状态空间的深度很大Q盲目的dfs搜烦在状态空间里有可能会越陯深,q迟Z了解Q同时整个状态空间的宽度也很大,?/span>BFS可能׃爆空间。P代加深搜索恰恰是取了一个折中。利用了dfs的优势,限制了搜索的深度Q避免了出现无解的境地。由于深度是逐个增加的,当搜C个解后就退出,所以避免了BFS中判重的一步操作,当然在P代深搜的q程中,q可以加入剪枝,可以优化E序。但是我的程序在POJ上还不快Q还要找扑֎因,也许q有优化。下面是一些关键代码:


for(limit=0; ;limit++)
        
{
            
if(dfs(start,0))
            
{
                
if(limit == 0)
                
{
                    printf(
"No moves needed\n");
                }

                
else
                
{
                    
for(i=0; i<limit; i++)
                    
{
                        printf(
"%c",'A'+pre[i]);
                    }

                    printf(
"\n");
                }

                printf(
"%d\n",rlt);
                
break;
            }

        }

///q代q程
int dfs(struct S now, int depth)
{
    
int c1,c2,c3;
    struct S st;
    test(now,c1,c2,c3);
    
if(c1 == 8)
    
{
        rlt
=1;
        
return 1;
    }

    
else if(c2 == 8)
    
{
        rlt
=2;
        
return 1;
    }

    
else if(c3 == 8)
    
{
        rlt
=3;
        
return 1;
    }

    
if(depth == limit)
        
return 0;
    
if(8-c1 > limit-depth && 8-c2 > limit-depth && 8-c3 > limit-depth)
        
return 0;
    st
=NewStateA(now);
    pre[depth]
=0;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateB(now);
    pre[depth]
=1;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateC(now);
    pre[depth]
=2;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateD(now);
    pre[depth]
=3;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateE(now);
    pre[depth]
=4;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateF(now);
    pre[depth]
=5;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateG(now);
    pre[depth]
=6;
    
if(dfs(st,depth+1))
        
return 1;
    st
=NewStateH(now);
    pre[depth]
=7;
    
if(dfs(st,depth+1))
        
return 1;
    
return 0;
}

///深搜


飞飞 2008-04-20 15:44 发表评论
]]>
A*搜烦求最短\http://www.shnenglu.com/linyangfei/archive/2008/04/20/47662.html飞飞飞飞Sun, 20 Apr 2008 07:25:00 GMThttp://www.shnenglu.com/linyangfei/archive/2008/04/20/47662.htmlhttp://www.shnenglu.com/linyangfei/comments/47662.htmlhttp://www.shnenglu.com/linyangfei/archive/2008/04/20/47662.html#Feedback4http://www.shnenglu.com/linyangfei/comments/commentRss/47662.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/47662.html阅读全文

飞飞 2008-04-20 15:25 发表评论
]]>
Sudokuhttp://www.shnenglu.com/linyangfei/archive/2007/09/23/32718.html飞飞飞飞Sun, 23 Sep 2007 07:29:00 GMThttp://www.shnenglu.com/linyangfei/archive/2007/09/23/32718.htmlhttp://www.shnenglu.com/linyangfei/comments/32718.htmlhttp://www.shnenglu.com/linyangfei/archive/2007/09/23/32718.html#Feedback0http://www.shnenglu.com/linyangfei/comments/commentRss/32718.htmlhttp://www.shnenglu.com/linyangfei/services/trackbacks/32718.html2676 Sudoku

 

Source fromQ?/span> http://acm.pku.edu.cn/JudgeOnline/problem?id=2676

Sudoku中文?#8220;数独”游戏Q游戏规则是在一?/span>9×9的方g填入1Q?/span>9q?/span>9个数字,9×9的大Ҏ又被划分成了9?/span>3×3的小ҎQ要求填入的q?/span>1Q?/span>9q?/span>9个数字中Q在每一行,每一列及每一个小Ҏ中都不能重复出现?/span>

?/span>pku上,我暴搜的ҎQ将每个I格的位|几下,然后?/span>dfs往里填敎ͼ不符合条件的回溯。方法如下:

Source

 

Problem: 2676 User: alpc60

Memory: 80K Time: 1171MS

Language: C++ Result: Accepted

 

Source

#include <stdio.h>

#include <string.h>

 

struct P

{

       int x,y,num;

}point[100];

int map[10][10],count;

bool mr[10][10],mc[10][10],mm[10][10];

 

int dfs(int n);

int find(int x, int y);

 

int main()

{

       int i,j,cases;

       //freopen("2676.txt","r",stdin);

       scanf("%d",&cases);

       while(cases--)

       {

              count=0;

              memset(mc,false,sizeof(mc));

              memset(mr,false,sizeof(mr));

              memset(mm,false,sizeof(mm));

              memset(map,0,sizeof(map));

              for(i=1; i<=9; i++)

                     for(j=1; j<=9; j++)

                     {

                            scanf("%1d",&map[i][j]);

                            if(map[i][j]==0)

                            {

                                   point[count].x=i;

                                   point[count].y=j;

                                   point[count].num=0;

                                   count++;

                            }

                            else

                            {

                                   mr[i][map[i][j]]=true;

                                   mc[j][map[i][j]]=true;

                                   mm[find(i,j)][map[i][j]]=true;

                            }

                     }

              dfs(0);

              //{

                     for(i=0; i<count; i++)

                            map[point[i].x][point[i].y]=point[i].num;

                     for(i=1; i<=9; i++)

                     {

                            for(j=1; j<=9; j++)

                            {

                                   printf("%d",map[i][j]);

                            }

                            printf("\n");

                     }

              //}

       }

       return 0;

}

int dfs(int n)

{

       int i,t;

       if(n>=count)

              return 1;

       t=find(point[n].x,point[n].y);

       for(i=1; i<=9; i++)

       {

              if(!mr[point[n].x][i] && !mc[point[n].y][i] && !mm[t][i])

              {

                     mr[point[n].x][i]=true;

                     mc[point[n].y][i]=true;

                     mm[t][i]=true;

                     point[n].num=i;

                     if(dfs(n+1))

                            return 1;

                     mr[point[n].x][i]=false;

                     mc[point[n].y][i]=false;

                     mm[t][i]=false;

                     point[n].num=0;

              }

       }

       return 0;

}

int find(int x, int y)

{

       int r,c;

       r=x%3?(x/3+1):(x/3);

       c=y%3?(y/3+1):(y/3);

       return (r-1)*3+c;

}



飞飞 2007-09-23 15:29 发表评论
]]>
|络?/title><link>http://www.shnenglu.com/linyangfei/archive/2007/09/22/32675.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sat, 22 Sep 2007 09:09:00 GMT</pubDate><guid>http://www.shnenglu.com/linyangfei/archive/2007/09/22/32675.html</guid><wfw:comment>http://www.shnenglu.com/linyangfei/comments/32675.html</wfw:comment><comments>http://www.shnenglu.com/linyangfei/archive/2007/09/22/32675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/linyangfei/comments/commentRss/32675.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/linyangfei/services/trackbacks/32675.html</trackback:ping><description><![CDATA[  <p><span>|络?/span></p> <p><span>1273 </span><span>Drainage Ditches</span></p> <p><span>q是一道比较单U的|络,题目要求只要求出源点到汇点的最大流p了,而ƈ不需要Q何的建模抽象的东西,唯一一点要注意的是Q要考虑有重边的情况?/span></p> <p><span>q里我用的是增广路法求的最大流Q流从源?/span><span>s</span><span>出发Q用</span><span>BFS</span><span>扑ֈ一条增q\径,然后找这条\径上的最?/span><span>min</span><span>Q对增广路进行扩展,每一ơ扩展会使得</span><span>f[pre[i]][i]</span><span>的值增大,那么它的反向路径</span><span>f[i][pre[i]]</span><span>的g减小Q一直进行下去,直到找不到增q\为止Q算法结束?/span></p> <p><span>Source</span></p> <p> </p> <p><span>Problem Id:1273 User Id:linyangfei </span></p> <p><span>Memory:240K Time:15MS</span></p> <p><span>Language:C++ Result:Accepted</span></p> <p> </p> <p><span>Source </span></p> <p> </p> <p><span>#include <stdio.h></span></p> <p><span>#include <string.h></span></p> <p> </p> <p><span>int n,m,pre[205];</span></p> <p><span>int f[205][205];</span></p> <p><span>bool mark[205];</span></p> <p> </p> <p><span>int bfs();</span></p> <p><span>__int64 MaxFlow();</span></p> <p> </p> <p><span>int main()</span></p> <p><span>{</span></p> <p><span><span>       </span>int i,s,e,c;</span></p> <p><span><span>       </span>//freopen("1273.in","r",stdin);</span></p> <p><span><span>       </span>while(scanf("%d%d",&m,&n)!=EOF)</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>memset(f,0,sizeof(f));</span></p> <p><span><span>              </span>for(i=0; i<m; i++)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>scanf("%d%d%d",&s,&e,&c);</span></p> <p><span><span>                     </span>if(f[s-1][e-1]==0)</span></p> <p><span><span>                            </span>f[s-1][e-1]=c;</span></p> <p><span><span>                     </span>else</span></p> <p><span><span>                            </span>f[s-1][e-1]+=c;</span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>printf("%I64d\n",MaxFlow());</span></p> <p><span><span>       </span>}</span></p> <p><span><span>       </span>return 0;</span></p> <p><span>}</span></p> <p> </p> <p><span>int bfs()</span></p> <p><span>{</span></p> <p><span><span>       </span>int q[205],qt=0,qh=1,i,x,min;</span></p> <p><span><span>       </span>q[qt]=0;</span></p> <p><span><span>       </span>mark[0]=true;</span></p> <p><span><span>       </span>while(qt<qh)</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>x=q[qt];</span></p> <p><span><span>              </span>if(x==n-1)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>min=100000000;</span></p> <p><span><span>                     </span>for(i=n-1; pre[i]!=-1; i=pre[i])</span></p> <p><span><span>                            </span>min=f[pre[i]][i]<min?f[pre[i]][i]:min;</span></p> <p><span><span>                     </span>return min;</span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>for(i=1; i<n; i++)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>if(!mark[i] && f[x][i]>0)</span></p> <p><span><span>                     </span>{</span></p> <p><span><span>                            </span>q[qh++]=i;</span></p> <p><span><span>                            </span>mark[i]=true;</span></p> <p><span><span>                            </span>pre[i]=x;</span></p> <p><span><span>                     </span>}</span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>qt++;</span></p> <p><span><span>       </span>}</span></p> <p><span><span>       </span>return 0;</span></p> <p><span>}</span></p> <p> </p> <p><span>__int64 MaxFlow()</span></p> <p><span>{</span></p> <p><span><span>       </span>int i,min;</span></p> <p><span><span>       </span>__int64 maxflow=0;</span></p> <p><span><span>       </span>memset(mark,0,sizeof(mark));</span></p> <p><span><span>       </span>for(i=0; i<n; i++)</span></p> <p><span><span>              </span>pre[i]=-1;</span></p> <p><span><span>       </span>while(min=bfs())</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>for(i=n-1; pre[i]!=-1; i=pre[i])</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>f[pre[i]][i]-=min;</span></p> <p><span><span>                     </span>f[i][pre[i]]+=min;</span></p> <p><span><span>                     </span></span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>maxflow+=min;</span></p> <p><span><span>              </span>memset(mark,0,sizeof(mark));</span></p> <p><span><span>              </span>for(i=0; i<n; i++)</span></p> <p><span><span>                     </span>pre[i]=-1;</span></p> <p><span><span>       </span>}</span></p> <p><span><span>       </span>return maxflow;<span>     </span></span></p> <p><span>}</span></p> <p><span>1149 PIGS</span></p> <p><span><span>       </span></span><span>也是一道很l典的网l流的题目,题目大意?/span><span>Mirko</span><span>?/span><span>M</span><span>个猪圈,猪圈里面有一定数量的猪,但他没有钥匙Q而只有来买猪的顾客才会有一些特定房间的钥匙Q每ơ顾客来之前Q都?/span><span>Mirko</span><span>预约好,所?/span><span>Mirko</span><span>的Q务就是找Z个计划,使他能卖出最多数量的猪。对于每位顾客,</span><span>Mirko</span><span>可以选择卖出猪的数量Q也可以在该֮打开的猪圈间L调整猪的数量Q每个猪圈的定w无限大?/span></p> <p><span><span>       </span></span><span>我觉得这个问题的一个关键点是徏模,如何建立一个网l流的模型很关键。我把所有的猪圈l一看成一个大的源?/span><span>S</span><span>Q把每个֮看成是一个节点,然后再h工地d一个汇炏V这样可以得Z面的路径关系?/span></p> <p><span><span>1?nbsp;</span></span><span>在先到的֮和后到的֮之间有一条\径,指向后到的顾客,q条路径的容量无限大?/span></p> <p><span><span>2?nbsp;</span></span><span>在源Ҏ指向各个֮的\径,路径的容量֮ؓ拥有的钥匙所能打开的猪圈的猪的总量Q注意,当两个顾客拥有同一把钥匙的时候,猪圈的数量只能加C个顾客节点的路径上,不能重复加,他们之间的{Udpd?/span><span>1</span><span>中两֮间容量无限大的\径来实现?/span></p> <p><span>我想有了q两点,把网l流的模型徏立v来后Q求解的法按照</span><span>1273</span><span>的模版就应该很容易了?/span></p> <p><span>#include <stdio.h></span></p> <p><span>#include <string.h></span></p> <p> </p> <p><span>const int INF=100000000;</span></p> <p> </p> <p><span>int f[105][105],pig[1005],key[1005][105],pre[105];</span></p> <p><span>bool mark[105];</span></p> <p><span>int m,n;</span></p> <p> </p> <p><span>int bfs();</span></p> <p><span>int MaxFlow();</span></p> <p> </p> <p><span>int main()</span></p> <p><span>{</span></p> <p><span><span>       </span>int i,j,c,p,k;</span></p> <p><span><span>       </span>//</span><span>猪圈看作一个大的源?/span><span>0</span><span>Q再外加一个汇?/span><span>n+1</span></p> <p><span><span>       </span>freopen("1149.txt","r",stdin);</span></p> <p><span><span>       </span>while(scanf("%d%d",&m,&n)!=EOF)</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>for(i=1; i<=m; i++)</span></p> <p><span><span>                     </span>scanf("%d",&pig[i]);</span></p> <p><span><span>              </span>memset(f,0,sizeof(f));</span></p> <p><span><span>              </span>memset(key,0,sizeof(key));</span></p> <p><span><span>              </span>for(i=1; i<=n; i++)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>scanf("%d",&c);<span>                         </span>//</span><span>每位֮拥有钥匙的数?/span></p> <p><span><span>                     </span>for(j=1; j<=c; j++)</span></p> <p><span><span>                     </span>{</span></p> <p><span><span>                            </span>scanf("%d",&p);<span>                  </span>//</span><span>输入每把钥匙的编?/span></p> <p><span><span>                            </span>f[0][i]+=pig[p];</span></p> <p><span><span>                            </span>key[p][i]=1;</span></p> <p><span><span>                            </span>pig[p]=0;</span></p> <p><span><span>                     </span>}</span></p> <p><span><span>                     </span>scanf("%d",&c);<span>                         </span>//</span><span>输入每位֮需要猪的数?/span></p> <p><span><span>              </span><span>       </span>f[i][n+1]=c;</span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>for(i=1; i<=m; i++)</span></p> <p><span><span>                     </span>for(j=1; j<=n; j++)</span></p> <p><span><span>                     </span>{</span></p> <p><span><span>                            </span>if(key[i][j])</span></p> <p><span><span>                                   </span>for(k=j+1; k<=n; k++)</span></p> <p><span><span>                                   </span>{</span></p> <p><span><span>                                          </span>if(key[i][k])</span></p> <p><span><span>                                                 </span>f[j][k]=INF;</span></p> <p><span><span>                                   </span>}</span></p> <p><span><span>                     </span>}</span></p> <p><span><span>              </span>printf("%d\n",MaxFlow());</span></p> <p><span><span>       </span>}</span></p> <p><span><span>       </span>return 0;</span></p> <p><span>}</span></p> <p><span>int bfs()</span></p> <p><span>{</span></p> <p><span><span>       </span>int q[205],qt=0,qh=1,i,x,min;</span></p> <p><span><span>       </span>q[qt]=0;</span></p> <p><span><span>       </span>mark[0]=true;</span></p> <p><span><span>       </span>while(qt<qh)</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>x=q[qt];</span></p> <p><span><span>              </span>if(x==n+1)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>min=100000000;</span></p> <p><span><span>                     </span>for(i=n+1; pre[i]!=-1; i=pre[i])</span></p> <p><span><span>                            </span>min=f[pre[i]][i]<min?f[pre[i]][i]:min;</span></p> <p><span><span>                     </span>return min;</span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>for(i=1; i<=n+1; i++)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>if(!mark[i] && f[x][i]>0)</span></p> <p><span><span>                     </span>{</span></p> <p><span><span>                            </span>q[qh++]=i;</span></p> <p><span><span>                            </span>mark[i]=true;</span></p> <p><span><span>                            </span>pre[i]=x;</span></p> <p><span><span>                     </span>}</span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>qt++;</span></p> <p><span><span>       </span>}</span></p> <p><span><span>       </span>return 0;</span></p> <p><span>}</span></p> <p> </p> <p><span>int MaxFlow()</span></p> <p><span>{</span></p> <p><span><span>       </span>int i,min;</span></p> <p><span><span>       </span>int maxflow=0;</span></p> <p><span><span>       </span>memset(mark,0,sizeof(mark));</span></p> <p><span><span>       </span>for(i=0; i<=n+1; i++)</span></p> <p><span><span>              </span>pre[i]=-1;</span></p> <p><span><span>       </span>while(min=bfs())</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>for(i=n+1; pre[i]!=-1; i=pre[i])</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>f[pre[i]][i]-=min;</span></p> <p><span><span>                     </span>f[i][pre[i]]+=min;</span></p> <p><span><span>                     </span></span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>maxflow+=min;</span></p> <p><span><span>              </span>memset(mark,0,sizeof(mark));</span></p> <p><span><span>              </span>for(i=0; i<=n+1; i++)</span></p> <p><span><span>                     </span>pre[i]=-1;</span></p> <p><span><span>       </span>}</span></p> <p><span><span>       </span>return maxflow;<span>     </span></span></p> <p><span>}</span></p> <p> </p> <img src ="http://www.shnenglu.com/linyangfei/aggbug/32675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/linyangfei/" target="_blank">飞飞</a> 2007-09-22 17:09 <a href="http://www.shnenglu.com/linyangfei/archive/2007/09/22/32675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>动态规划专?/title><link>http://www.shnenglu.com/linyangfei/archive/2007/09/22/32674.html</link><dc:creator>飞飞</dc:creator><author>飞飞</author><pubDate>Sat, 22 Sep 2007 09:06:00 GMT</pubDate><guid>http://www.shnenglu.com/linyangfei/archive/2007/09/22/32674.html</guid><wfw:comment>http://www.shnenglu.com/linyangfei/comments/32674.html</wfw:comment><comments>http://www.shnenglu.com/linyangfei/archive/2007/09/22/32674.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/linyangfei/comments/commentRss/32674.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/linyangfei/services/trackbacks/32674.html</trackback:ping><description><![CDATA[  <p><span>一?/span><span>1050 To the Max</span><span>Q?/span></p> <p><span><span>       </span></span><span>q是我的W一?/span><span>DP</span><span>Q题目的意思很单,在一个矩阵里面找它的子矩阵,使得子矩阉|g和到达最大。其实就是最大子D和问题在二l空间上的推qѝ先说一下一l的情况吧。设有数l?/span><span>a0,a1…an,</span><span>N其中q箋的子D,使它们的和达到最大。最开始的xQ是枚D矩阵的长度,计算每个子矩늚和,然后比较得出最大|q样要消耗的旉?/span><span>O(n)</span><span>。让我们再想惻I如果q个序列的每一个数都是整数Q那么它们的最大子D和是把所有的数相加。所以我们想要尽可能多地扑ֈ正数相加。在序列中有负数的情况下Q从头开始扫描数l,把正数都相加Q这其中可能会有负数Q一U情冉|Q负数和减小子段和,但这时子D和仍然为正Q用</span><span>sum</span><span>记录下连l子D和的最大|l箋惛_扫描Q因为后面有可能出现更大的正数的情况Q会使和比原来没加负C前更大;W二U情冉|Q加入一个负数后Q是q个q箋的子D和的值变成了负数Q这时就要抛弃该负数以及该负C前的所有序列,因ؓ前面若有子段与后面构成了q箋的子D,则这个子D一定会包括q个负数Q而在q个负数之前的序列的和是个负敎ͼ那么q个子段的和一定不是最大的子段和。抛弃这个负C前的序列后,子段和从q个负数后面的第一个数vQl扫描?/span></p> <p><span>//</span><span>一l数l求最大字D?/span></p> <p><span>int submax1(int a[], int n)</span></p> <p><span>{</span></p> <p><span><span>       </span>int b=0;</span></p> <p><span><span>       </span>int bn=-32767;</span></p> <p><span><span>       </span>int i;</span></p> <p><span><span>       </span>int sum=0;</span></p> <p><span><span>       </span>for(i=0; i<n; i++)</span></p> <p><span><span>       </span>{</span></p> <p><span><span>              </span>if(b>0)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>b+=a[i];</span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>else if(a[i]>bn && a[i]<0)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>bn=a[i];</span></p> <p><span><span>                     </span>b=a[i];</span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>else</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>b=a[i];</span></p> <p><span><span>              </span>}</span></p> <p><span><span>              </span>if(b>sum)</span></p> <p><span><span>              </span>{</span></p> <p><span><span>                     </span>sum=b;</span></p> <p><span><span>              </span>}</span></p> <p><span><span>       </span>}</span></p> <p><span><span>       </span>if(sum==0)</span></p> <p><span><span>              </span>return bn;</span></p> <p><span><span>       </span>else</span></p> <p><span><span>              </span>return sum;</span></p> <p><span>}</span></p> <p><span>其中变量</span><span>b</span><span>是记录当前扫描q的子段和的Q?/span><span>sum</span><span>记录的是子段和的最大?/span></p> <p><span>二维的情况:</span></p> <p><span><span>       </span></span><span>q里我用了一个很单的做法Q在二维数组</span><span>a[i][j]</span><span>里面枚DW一l的长度</span><span>k</span><span>Q然后得C?/span><span>k*n</span><span>的子矩阵Q把q个子矩늚每一列数值相加,把q个二维数组转化成了一l_再调用函?/span><span>int submax1(int a[], int n)</span><span>Q就计算得出最大倹{?/span></p> <p><span>ȝQ感觉我做这道题目还不是很像</span><span>DP</span><span>Q只有在求一l情况下?/span><span>sum</span><span>记录最大|以及在扫描是计算的子D和</span><span>b</span><span>Q代表了某数前面q箋的最大子D和?/span></p> <p><span>二?/span><span>1579 Function Run Fun</span></p> <p><span>q肯定是一个处心积虑的函数Q没看出它有什么实际的用处</span></p> <p><span>Consider a three-parameter recursive function w(a, b, c): <br>if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns: 1 <br>if a > 20 or b > 20 or c > 20, then w(a, b, c) returns: w(20, 20, 20) <br>if a < b and b < c, then w(a, b, c) returns: w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) <br>otherwise it returns: w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)</span></p> <p><span>q本w就是一个递归函数Q要是按照函数本w写递归式,l果肯定?/span><span>TLE</span><span>Q这里我开了一个三l数l,?/span><span>w(0,0,0)</span><span>开始递推Q逐步产生?/span><span>w(20,20,20)</span><span>的|复杂?/span><span>O(n^3)</span></p> <p><span>ȝQ这道题是很地道?/span><span>DP</span><span>Q因为它的子问题实在是太多了Q但q是属于单题目的范畴Q就像把</span><span>fabonacci</span><span>函数增加Cl_限制条g多点而已Q而实际上的做法都一栗?/span></p> <p><span>三?/span><span>1080 Humman Gene Function</span></p> <p><span>应该说这是一道比较经典的</span><span>DP</span><span>Q两串基因序列包?/span><span>A</span><span>?/span><span>C</span><span>?/span><span>G</span><span>?/span><span>T</span><span>Q每两个字母间的匚w都会产生一个相似|求基因序列(字符Ԍ匚w的最大倹{?/span></p> <p><span>感觉q题有点像求最长公共子序列。只不过把求最大长度改成了求最大的匚w倹{用二维数组</span><span>m[i][j]</span><span>记录字符?/span><span>a</span><span>中的W?/span><span>i</span><span>个字W与字符?/span><span>b</span><span>中的W?/span><span>j</span><span>个字W匹配所产生的最大倹{若字符?/span><span>a</span><span>的长度ؓ</span><span>la</span><span>Q字W串</span><span>b</span><span>的长度ؓ</span><span>lb</span><span>Q初始时</span><span>m[la][k](0<=k<=lb-1),</span><span>q里即ؓ字符?/span><span>a</span><span>的末与</span><span>b</span><span>中的字符匚wQ因q了字符?/span><span>a</span><span>的长度,所以匹配的时候只能时以空?/span><span>’-’</span><span>匚w。同理可产生</span><span>m[k][lb](0<=k<=la-1)</span><span>Q的所有|再以此往前递推Q其状态{ULEؓ</span></p> <p><span>m[i][j]=max{map[i][j]+m[i+1][j+1],m[‘-‘][j]+m[i][j+1],m[i][‘-’]+m[i+1][j]}</span></p> <p><span>所以最?/span><span>m[0][0]</span><span>即ؓ所求?/span></p> <p><span>四?/span><span>2533 Longest Ordered Subsequence</span></p> <p><span><span>       </span></span><span>很早以前qq这题,求最大递增序列Q那时刚刚晓得什么叫“动态规?#8221;Q是《算法设计与分析》(王晓东)上的一道习题,开始不会做。后来想了一U很W的办法Q用?/span><span>O(n^2)</span><span>的时_q附加了</span><span>n^2</span><span>的空间。看了世铭的两种ҎQ一U是</span><span>O(n^2),</span><span>一U是</span><span>O(nlogn)</span><span>。两U方法核心的Ҏ都一P用一?/span><span>n</span><span>大小的一l空?/span><span>(a[n])</span><span>Q?/span><span>a[i]</span><span>表示子串长度?/span><span>i</span><span>时所有子串最大g的最|因ؓ要找一?/span><span>i</span><span>长度的子Ԍ那么</span><span>a[i]</span><span>的D要比长度ؓ</span><span>i-1</span><span>子串中的一个最末位的D大。之所以会有两U时间复杂度的差别,是在查?/span><span>i-1</span><span>长度的末րg的最值的时候,前者是U性的搜烦Q后者是用的二分搜烦Q提高了旉效率。另外说一下这题的变Ş吧,</span><span>1631 Briging signals</span><span>Q是有很多\由器搭线Q要求求Z不相交的搭配的最大个数。细l分析一下题目,只要被匹配的路由器序h一个递增的序列,则他们的q线׃会相交,把q题转化为求最大递增序列的问题。但需要注意的是这题的问题规模</span><span>n</span><span>辑ֈ?/span><span>40000</span><span>Q?/span><span>Time Limit :1000MS</span><span>Q所以在q里要选用刚才提到?/span><span>O(nlogn)</span><span>的算法,才不会导?/span><span>TLE</span><span>?/span></p> <p><span>五?/span><span>1014 Dividing</span></p> <p><span><span>       </span></span><span>实际上早q到这题了Q那时对</span><span>ACM</span><span>的认识还很幼E,刚学完程序设计,学会怎么用递归Q也不看题目的条Ӟ反正是六种</span><span>marble</span><span>Q写了个递归的程序,试数据当然能通过Q但其结果肯定是</span><span>TLE</span><span>了。又q了一D|_有了Ҏ间效率的观念Q写了个枚D法计d?/span><span>1/2</span><span>的可达性,不过q是有很多情冉|都没有考虑刎ͼl果</span><span>WA</span><span>了。到现在?/span><span>DP</span><span>Q再来看xq题Q其实还有更好的解法。也是计d?/span><span>1/2(sum)</span><span>的可达性,如果</span><span>marble</span><span>的L?/span><span>n</span><span>Q则</span><span>DP</span><span>法的时间复杂度可以辑ֈ</span><span>O(n*sum)</span><span>。用一个一l数l标C</span><span>0</span><span>Q?/span><span>sum</span><span>所有加和的可达性,对于一颗宝石的价?/span><span>i</span><span>Q数l?/span><span>a[j]==true</span><span>Q表C和?/span><span>j</span><span>可达Q那么可得出</span></p> <p><span>a[i+j]=true,</span><span>?/span><span>i+j</span><span>的值可达。@环以致于用完所有的宝石Q观?/span><span>a[sum]</span><span>的|</span><span>true</span><span>即ؓq些宝石可分Q反之不可分?/span></p> <p><span><span>       </span></span><span>六?/span><span>2192 Zipper</span></p> <p><span><span>       </span></span><span>又是一道字W串的动态规划题目,qC下:l出三个字符Ԍ</span><span>s1,s2,s3</span><span>Q?/span><span>s3</span><span>的长度ؓ</span><span>s1</span><span>?/span><span>s2</span><span>长度之和Q判?/span><span>s1</span><span>Q?/span><span>s2</span><span>是否?/span><span>s3</span><span>的不重合的公共子序列。其实就是判别公׃序列的升U版Q把原来的一对一Q改成了一对二。我用一个二l数l?/span><span>mark[i][j]</span><span>记录</span><span>s1</span><span>中的W?/span><span>i</span><span>个字W以?/span><span>s2</span><span>中的W?/span><span>j</span><span>个字W能否与</span><span>s3[i+j]</span><span>惛_配?/span></p> <p><span><span>       </span>If(s1[i]==s3[i+j]) mark[i+1][j]=true;//s1</span><span>中的W?/span><span>i</span><span>个字W匹配,?/span><span>s1</span><span>串向后移一个字W?/span></p> <p><span><span>       </span>If(s2[j]==s3[i+j]) mark[i][j+1]=true;//s2</span><span>中的W?/span><span>j</span><span>个字W匹配,?/span><span>s2</span><span>串向后移一个字W?/span></p> <p><span>q样?/span><span>O(n^2)</span><span>的时_递推能?/span><span>mark[c1][c2]</span><span>的|gؓ</span><span>true</span><span>输出卌够全部匹配?/span></p> <p><span><span>       </span></span><span>七?/span><span>2576 Tug of War</span></p> <p><span><span>       </span></span><span>我觉得非常有必要做的一道题目。这道题目看似很单,实质是</span><span>n</span><span>个数Q将其分成两堆,两堆数量的差距不过</span><span>1</span><span>Qƈ且ɘq两堆数字之和最接近。是一道动态规划题目,看v来简单是因ؓ受了</span><span>1014</span><span>题的影响Q但q题两堆的数目是定的,一堆是</span><span>n/2</span><span>个,另一堆则?/span><span>n-n/2</span><span>?/span><span>,</span><span>?/span><span>1014</span><span>题是不受加和数目的媄响的。这题也不同与多c_骨牌那题Q因为那题中各个数字之间是一一对应的。苦想了一天没有结果,看来q题q要L其它的方法。这题不是我自己想除来的Q看?/span><span>alpc02</span><span>的代码,自己又照自己的理解重写了一遍?/span></p> <p><span><span>       </span></span><span>记录状态是用一个二l数l,</span><span>mark[i][j]</span><span>表示</span><span>i</span><span>个数相加Q其D否达?/span><span>j</span><span>Q如果能</span><span>mark[i][j]</span><span>的ؓ</span><span>true</span><span>。对于一个输入的?/span><span>w</span><span>Q修?/span><span>i</span><span>个数的每一U状态,其状态{ULE:</span></p> <p><span><span>       </span>If(m[i][j]) then m[i][j+w]=true;//j+w</span><span>的值可?/span><span>j</span><span>的值加?/span></p> <p><span>由后往前修Ҏ一?/span><span>i</span><span>下的可达倹{那么最后就只要?/span><span>n/2</span><span>行中扑և</span><span>m[n/2][j]</span><span>的最大|</span><span>j<=total/2</span><span>Q,q就是两堆之和最接近的一l数倹{?/span></p> <p><span><span>       </span></span><span>八?/span><span>2441 Arrange the Bulls</span></p> <p><span><span>       </span></span><span>q题里我看到了动态规划的一U新的方法。每头牛有自己喜Ƣ的球场,我们的Q务就是安排这些牛到它们喜Ƣ的球场去Q然后计所有合理的解的数量Q篮球场的数目最?/span><span>20</span><span>个)。显Ӟ要找C个解Q很Ҏp搜出Q但是要求所有解的数量,如果再用搜烦的方法,在时间上是不堪忍受的。这里用了一U新的方法(对于我来说是一U新Ҏ</span><span>^_^</span><span>Q。用二进制数记录当前球Z用的状态,“</span><st1:chmetcnv TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="1" UnitName="”" w:st="on"><span>1</span><span>”</span></st1:chmetcnv><span>表示未分配,“</span><st1:chmetcnv TCSC="0" NumberType="1" Negative="False" HasSpace="False" SourceValue="0" UnitName="”" w:st="on"><span>0</span><span>”</span></st1:chmetcnv><span>表示已分配,每个球Z每个C相对应。所?/span><span>20</span><span>个篮球场d需要一?/span><span>1<<20</span><span>的数l来记录所有生成的状态。想到这里,我觉得这题基本上已经解决一半了Q剩下的是如何q行状态{U,用的是二进制运。我觉得我在q个斚w一炚w不熟悉,不会写,看了别h的代码,然后自己仿写了?/span></p> <p><span>一U是用滚动数l,q种Ҏ占用旉I间都较大,另一U是状态压~的</span><span>DP</span><span>Q方法比较y妙?em>呵呵Q要讲得更深点,{我变成牛h在箋?#8230;…</em></span></p> <p><span><span>       </span></span><span>九?/span><span>2738 Two Ends</span></p> <p><span><span>       </span></span><span>有点惛_弈的题目Q我事用</span><span>dp</span><span>来做的。有一l数Q两个h分别轮流从数l两头取敎ͼW一个取数的人可以选用L的策略,W二个h则要一直用贪心策略。问最后第一个h所取得的数字之和比W二个h取得的数字之和最多多多少?/span></p> <p><span><span>       </span></span><span>很容易想?/span><span>DP</span><span>Q第二个人的取数规则是一定的Q只有第一个个人可以选择Q那么在W一个h取数的时候就有状态{ULE,</span><span>dp[i][j]</span><span>表示前面是第</span><span>i</span><span>个数后面是第</span><span>j</span><span>个数的时候第一个h所能得到数字和的最大倹{?/span></p> <p><span>if(dp[i][j]+a[i]>dp[i+1][j])</span></p> <p><span><span>                                   </span>dp[i+1][j]=dp[i][j]+a[i];<span>              </span>//</span><span>取前面的?/span></p> <p><span><span>                            </span>if(dp[i][j]+a[j]>dp[i][j-1])</span></p> <p><span><span>                                   </span>dp[i][j-1]=dp[i][j]+a[j];<span>        </span>//</span><span>取后面的?/span></p> <p><span>那么W二个h的状态{Ud相对比较好确定了Q?/span></p> <p><span>if(a[i]<a[j] && dp[i][j]!=-1 && dp[i][j]>dp[i][j-1])</span></p> <p><span><span>                            </span>dp[i][j-1]=dp[i][j];</span></p> <p><span><span>                     </span>if(a[i]>=a[j] && dp[i][j]!=-1 && dp[i][j]>dp[i+1][j])</span></p> <p><span><span>                            </span>dp[i+1][j]=dp[i][j];</span></p> <p><span>最后一步只需比较</span><span>dp[i][i]</span><span>的|选其中最大的出来p?/span><span>^_^ </span></p> <img src ="http://www.shnenglu.com/linyangfei/aggbug/32674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/linyangfei/" target="_blank">飞飞</a> 2007-09-22 17:06 <a href="http://www.shnenglu.com/linyangfei/archive/2007/09/22/32674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.yuandanjie.cn" target="_blank">ҹҹþ</a>| <a href="http://www.liopenfactory.com.cn" target="_blank">97Ʒ97þþþþ </a>| <a href="http://www.8x8z.cn" target="_blank">þþþþþƷͼƬ</a>| <a href="http://www.95dq.cn" target="_blank">˾þں2019</a>| <a href="http://www.chiom.cn" target="_blank">þ99ƷۺϹҳ</a>| <a href="http://www.cxdsj.net.cn" target="_blank">þۺ97ɫ</a>| <a href="http://www.88kam.cn" target="_blank">þþƷ</a>| <a href="http://www.mashar.cn" target="_blank">޺ݺۺϾþþþ</a>| <a href="http://www.gx177.cn" target="_blank">þۺϺݺۺϾþۺ88</a>| <a href="http://www.njcwhs.cn" target="_blank">ɫAVԾþþþþ</a>| <a href="http://www.pr010.cn" target="_blank">þþƷa޹v岻</a>| <a href="http://www.q126.cn" target="_blank">뾫ƷþѼ </a>| <a href="http://www.musicweb.cn" target="_blank">þþþ99ƷƬԿ</a>| <a href="http://www.fengguan1688.cn" target="_blank">þɧ</a>| <a href="http://www.vphz.cn" target="_blank">þۺŷ</a>| <a href="http://www.thebeaver.cn" target="_blank">þùֻоƷ</a>| <a href="http://www.bgbgb.cn" target="_blank">þþþ</a>| <a href="http://www.tvauto.cn" target="_blank">99þùۺϾƷŮͬͼƬ</a>| <a href="http://www.ruimen.com.cn" target="_blank">޾Ʒþþþþ</a>| <a href="http://www.seomajor.cn" target="_blank">Ʒþþþþ</a>| <a href="http://www.xueyang.net.cn" target="_blank">Ʒþþþþþ</a>| <a href="http://www.utql.cn" target="_blank">ձþþþþþþþ</a>| <a href="http://www.dush.net.cn" target="_blank">ɫվwwwþþ</a>| <a href="http://www.eksn.cn" target="_blank">ƷŮٸavѾþ</a>| <a href="http://www.zqdiary.cn" target="_blank">һþþþþþ</a>| <a href="http://www.zhxyzb.cn" target="_blank">һþöAV</a>| <a href="http://www.qj37c.cn" target="_blank">þۺ༤</a>| <a href="http://www.cnmango.cn" target="_blank">ɫۺϾþ۾Ʒ</a>| <a href="http://www.guer.org.cn" target="_blank">ɫͷվþ</a>| <a href="http://www.gpuk.cn" target="_blank">һֻƴƬ99þ</a>| <a href="http://www.jblw.net.cn" target="_blank">ҹþAAAAAëƬѿ</a>| <a href="http://www.mayray.com.cn" target="_blank">޾þþþþ77777</a>| <a href="http://www.hnxxzw.cn" target="_blank">þþƷˮavۺ</a>| <a href="http://www.zhangmengm.cn" target="_blank">99þ˾ƷۺϹۿ</a>| <a href="http://www.gcxd.net.cn" target="_blank">ɫۺϾžþ</a>| <a href="http://www.job126.cn" target="_blank">þþƷavˮ</a>| <a href="http://www.clkj168.cn" target="_blank">þ99Ʒþþþþò</a>| <a href="http://www.jzxqbz.cn" target="_blank">Ըߺþþþþþþ</a>| <a href="http://www.66zhuangzxkcw.cn" target="_blank">Ʒ91þþþþþa</a>| <a href="http://www.niugu6.cn" target="_blank">Ʒþþþ</a>| <a href="http://www.expo2006sy.com.cn" target="_blank">ɫۺϾþ88ɫۺ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>