USACO 3.3解题思路报告

来源:互联网 发布:vb中对象的属性 编辑:程序博客网 时间:2024/05/20 11:52

Riding the Fences

给出一张无向图,求它的欧拉通路,按字典序输出经过的每个点。

求出每个点的入度,用邻接矩阵存图,每读入一条连接u,v的边,mp[u][v]++,mp[v][u]++。
将找到的第一个入读为奇数的点作为起点,若没有入读为奇数的点,则将第一个入度不为零的点作为起点,进行深度优先搜索。每走一条边就给这条边的两个方向都-1,每当无路可走时,就将盖点加入答案的数组中,最后倒序输出答案。


Shopping Offers

给出b种(不超过5种)商品的单价和需求量(不超过5件),并给出一些同时购买某些物品的优惠方案,求出最少的花费。

f[a][b][c][d][e]表示购买a个商品1,b个商品2……的最少花费,将f[a][b][c][d][e]初始化为不使用任何优惠方案的花费,对每一种优惠方案进行dp即可。


Camelot

给出一个R*C的棋盘,给出若干个骑士的位置和国王的位置,国王每次可以走到与他相邻的8个格子中的任意一个,而骑士的走法则与国际象棋中的马一样。特殊的规则是,如果国王遇到骑士,他们可以一起行动,按照骑士的走法移动,步数也只算骑士的步数。
求一个点,使所有骑士和国王集结到此的步数和最小,求最小步数和。

首先计算国王到各个点的距离,即为切里雪夫距离。然后对每个骑士所在点做一次SPFA,求出按骑士的行动规则到各个点的最小步数。同时,求出每个骑士接王到每个点的代价,算出王到各个点的最小花费。计算每个点骑士花费与王的花费的和,和的最小值即为答案。


Home on the Range

给出一张正方形的图,由0和1构成,1表示有障碍物,求图中各种边长的正方形的个数。

f[i][j]表示以点(i,j)为右下角的正方形的最大边长,则f[i][j]=min(f[i-1][j],f[i][j-1],f[i-1][j-1])+1;
然后,边长为2~f[i][j]的正方形数目均+1即可。


A Game

给出一串数,两个玩家进行游戏,每次每个玩家从序列的任意一端取一个数,两位玩家的最终得分为各自取走的数字之和。假如两人都采取最优策略,分别求出二人的最终得分。

f[i][j]表示区间i~j内先手能取到的最大分数,转移方程:
f[i][j]=sum[j]-sum[i-1]-min(f[i+1][j],f[i][j-1])
以区间长度为最外层进行循环。

0 0
原创粉丝点击