本文主要是介绍SDOI2009,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
[BZOJ1875] [SDOI2009]HH去散步
- 题目大意
- 给定 n(n≤20) 个点, m(m≤60) 条边的无向图(有重边,无自环),要求沿一条边的某一方向走完后不能立即走同一条边的反向,每条边长为1,询问从 S到T 路径长度为 P 的方案数
- 题解
- 有
2∗m 条有向边,构造矩阵,若从第i条边的终点可以走第j条边,那么 x[i,j]=1 ,这样构造出来的矩阵为走一步可以到达的边的位置 - 然后求出矩阵的 P−1 次幂,即为所求,然后用所有以 S为起点T 为终点的计入答案即可
- 有
- CODE
[BZOJ1226] [SDOI2009]学校食堂Dining
- 题目大意
- 给定n个人的序列,每个人有各自的口味 Ti(0≤Ti≤1000) ,每个人最多允许他后面紧挨着他的 Bi(0≤Bi≤7) 个人比他先打饭,第 i 道菜的口味是
a ,第 i−1 道是 b ,那么第i道菜做完的时间就是(a|b)−(a & b) ,询问所有人最短完成时间和
- 给定n个人的序列,每个人有各自的口味 Ti(0≤Ti≤1000) ,每个人最多允许他后面紧挨着他的 Bi(0≤Bi≤7) 个人比他先打饭,第 i 道菜的口味是
- 题解
- 看错题目,看错题目,看错题目!!!
- 紧接着的 Bi 个人!
- dp[i,j,s]:前i−1个人打完,最后的人的口味是j,第i个人及其后面7个人的状态的所需的最短时间
- {dp[i+1,j,S>>1]=min{dp[i+1,j,S>>1],dp[i,j,S]}dp[i,Bk,S+{k}]=min{dp[i,Bk,S+{k}]=,dp[i,j,S]+cost(Bk,j)}i∈Si∉S且k∉S
- 初值 dp[0,0,0]=0
- ans=min{dp[n+1,i,0]}
- 复杂度 O(28NT) 爆炸
- 该算法的瓶颈在于 T 的范围很大,但是根据前面的两个转移,T那一维要么不变,要么也只与当前位差了
[−7,7] ,所以用位置的相对距离替换口味,就能将复杂度降下来了
这篇关于SDOI2009的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!