中南大学acm校赛解题报告.ppt
Problem H. Chocolate Auction Problem H. Chocolate Auction Problem H. Chocolate Auction 过河卒 使用动态规划求解 方法一: 过河卒每次只走一步 构造状态,必须记录下可能影响答案的所有因素 Y X Left Right K int F(Y, X, Left, Right, K) { res1=F(Y-1,x,x,x,K-1); res2=F(Y,X-1, min(Left,x-1), Right, K-1); res3=F(Y,X+1, Left, max(Right,x+1), K-1); return max(res1,res2,res3); } 表示接下来还能吃掉的最多棋子 (与已经吃了多少子无关) 方法二: 仅仅记录Left=Right=x 的状态 每次从一行的某个位置走到下一行某个位置,枚举这一行所走的所有路径 关键:过河卒在一行之内最多只需转向一次 int F(int y,int x,int k) { for(nx=0;nx9;nx++) for(mid=0;mid9;mid++) { t=f(y+1,nx,k-step)+score; res=max(res,t); } } Smallbox魔方 固定情况下的方案数 (6*n*n)! (a1!*a2!*a3!*a4!*a5!*a6!) Burnside引理 24种摆放方式24种置换 每种置换下不变的方案总数 24 需要分别统计所有置换 同一循环节内颜色相同 轴1: 3根轴 180° 循环节 2 90° (X 2) 循环节 4 轴2: 4根轴 120°(X 2) 循环节3 轴3: 6根轴 180° 循环节2 N为偶数时 F(n,a1,……a6)+ 9*F(n/2,a1/2,……a6/2)+ 8*F(n/3,a1/3,……a6/3)+ 6*F(n/4,a1/4,……a6/4) 24 N为奇数时 Problem K. Line Cover 算法框架: 1. 找出所有能覆盖5个点以上的直线 2. if 这种直线大于5条,返回NO else 将这些直线放入解中,并删除已经被覆盖的点 if 剩余点数大于25,返回NO else 通过搜索算法求最优解 一行之内掉头多次,可以通过改变路线变成掉头一次的方案 模P环境下,除法使用乘以逆元实现 按转动轴来分类比较简明 统计第一种转轴时需要枚举中心点的颜色,其余做法一样 Problem K. Line Cover 题目大意:问二维平面上的一些点能否用不多于5条的直线覆盖,如果能,求出需要的最少直线数目。 解题思路:该题数据规模达到200,直接使用搜索算法会导致超时,所以我要利用“5条”这个特殊条件将数据规模进行压缩。 Problem K. Line Cover 压缩规则:对于一个实例,如果存在一条直线能够覆盖5个以上的点,那么这条直线必须被包含在解中。如图中红色直线必须被选择,否则需要用到其它6条蓝色直线。 The 4th Collegiate Programming Contest ofCentral South University Solution Report Hosted by School of Information Science and Engineering April 24, 2010 题目类型及难度 liam 很难 NP搜索 Line Cover K lda 很难 组合计数 Smallbox魔方 J 序号 题目 类型 难度 命题 A Avatar 入门题 简单 kevin0602 B Simple Line Editor 字符串处理 简单 zfy0701 C 真三国无双 简单数学 简单 runformydream D 组合数末尾的零 简单数学 中等 kevin0602 E 菜鸟和大牛 动态规划 中等 blueThinker F 修路 二分 + 贪心 中等 kevin0602 G Mining 图论 较难 zfy0701 H Chocolate Auction 数据结构 较难 smallbox I 过河卒
原创力文档

文档评论(0)