2014北京赛区现场赛解题报告

1011.排序题。已知1-n随机排成一行,每次操作将某个数与后面的数交换,知道后面的数比该数大为止。问最少几次操作能使得数升序排列。

简单题。如果数x右侧含有比该数小的数,则一定要对x进行操作。统计这种数的个数sum,因此操作数>=sum,另一方面,可以构造一种操作方法恰为sum步操作完成排序:先把最大的数移到最右侧,再把次大数移到相邻位置,以此类推,可以证明,这种操作恰为sum次。

1001 模拟题。给定n个时间点和相应位置,每次在时间相邻的两个点之间移动,问最大速度可能是多少。按时间排序,直接求两点间速度最大值即可。一开始看错题意:忽略了黑体字条件,没想出快速求解方法,耽误了不少时间。

1008 动态规划。求n个数中任取若干个数,异或和>=m的取法数。dp[i][j]:前i个数中取若干数异或和为j的取法数。则dp[i][j]=dp[i-1][j]+dp[i-1][j^a[i]](取a[i]/不取a[i])   复杂度:O(N*MAXN)

注:此题卡空间卡的特别死...一开始不是WA就是MLE...

1004 动态规划。有n匹狼排成一列,每匹狼有一个战斗力a和附加战斗力b,杀死一匹狼需要消耗与它战斗力a相同的体力值以及此时他身边的所有狼的附加战斗力b,求杀狼顺序,使得损耗最小。(狼的相邻位置具有传递性---一匹狼死后,他的两个相邻位置相邻)

相邻具有传递性,如果考虑从第i匹狼开始杀,则需要考虑杀死他后两个序列的合并问题,不利于dp过程。因此我们反其道而行之,考虑最后死亡的狼,设序列[i,j]中最后死亡的狼为k,杀死k狼消耗a[k],但k两侧和谁相邻呢???[i,j]区间两侧情况还是未知的啊!不急,先往下考虑。序列被分为两部分[i,k-1]和[k+1,j],此时发现被分开的两个区间具有一个性质:k端的狼一定还没挂掉。因此在设计状态时,应该增加一个附件条件:f[i][j]:区间[i,j]两侧的狼都还未被杀掉条件下,杀掉区间[i,j]中的狼的最小损耗。这样就解决了k的损耗计算问题。dp的转移问题也就迎刃而解了。dp[i][j]=min(dp[i][k-1]+dp[k+1][j]+a[k]+b[i-1]+b[j+1],i<=k<=j} 初始化:dp[i][i]=a[i]+b[i-1]+b[i+1]。ans=dp[1][n]。区间[1,n]两侧的狼永远“存在”,满足dp的约束条件。

变题:如果不考虑相邻的传递性。

dp[i][j]:[i,j]区间杀死所有狼的最小消耗。枚举最先杀死的狼:dp[i][j]=min(dp[i][k-1]+dp[k+1][j]+a[k]+b[k-1]+b[k+1],i<=k<=j} 如果k-1<i或k+1>j,则不必加b,因为该区间也有一个性质:区间两侧的狼全部已死。ans=dp[1][n]。默认区间[1,n]两侧的狼永远“不存在”。

变题2:每次只取相邻狼附加战斗力中的最大值作为附加值。
dp[i][j]=min(dp[i][k-1]+dp[k+1][j]+a[k]+max(b[i-1],b[j+1]),i<=k<=j} 

此题的体会:

1.dp方向:正难则反

2.dp的状态定义:附加额外条件,使得更容易转移,不过前提是终态满足此限制。


-----------------------------------分界线---------------------------做出-----------------------未做出------------------------------------------------------------


1002.搜索题。给一个m*n的格子涂色(1<=m,n<=5)。共k种颜色,每种颜色涂c[i](sum(c[i])=m*n)。判断是否存在相邻格子不同色的涂色方案,若存在,请构造出来。

直接搜索,每个格子涂i色。从(0,0)出发,终点是(n-1,m-1)。

剪枝:如果剩下left个格子,而存在某种颜色的数目>=left/2向上取整,则不存在相应涂色方案

心得体会:

1.dfs技巧:仅需要一组可行解:flag全局变量初始化为false,找到可行解后,标记为true,其他分支不再进行搜索

2.判断条件:正难则反


剩下的题目还没看完,后面陆续添加...Orz


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值