摘要: 给定n个人的坐标,第一个人必须站在1 处,最后一个人站在L 处,其次让距离尽可能的相同。因此任意两个相邻的人相距必须与(L-1)/(n-1)【使用整数除法】相差最多为1,而且距离为(L-1)/(n-1)(整数除div)的个数尽可能的多,一个人由x移动到y的费用为|x-y|,求最小费用。问题转化为给定线段和最优长度,在最优长度最多的前提下费用最小,进一步说,就是在一堆最优长度中插入剩余的所有1.f[i,j]表示在前i个人就位后插入了j个(最优长度+1)的线段的最优解,DP方程直接看代码就行了,坐标式最好自己推导一下。View Code 1 program sunglasses(input,ou. 阅读全文
posted @ 2012-03-11 17:33 Codinginging 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 一开始有一个数n(1<=n<=1000000),两个人轮流对n 进行操作。每次可将n减去它的最大或最小的非零数位。现在给定G个N,问先手赢还是输。一道博弈问题,脑子一定要清晰,别想着想着自己乱了,那就太惨了。必败态和必胜态很好找,考试时就写了一个记忆化的博弈搜索树,结果悲剧的栈崩了两个点。其实可以转化成DP,f[i]为true表示i必胜,则f[i]=(not f[i-min[i]]) or (not f[i-max[i]]),实现很简单了。粘上我的博弈搜索记忆树··········& 阅读全文
posted @ 2012-03-11 17:09 Codinginging 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 本题谁都会做,在这里分析一下各个方法。1.按照说明模拟,不再累述。2.pascal同学有内置函数swap,但要注意数据类型了,longint不够2^32,int64不符合函数要求,只能用cardinal。3.最有水平的解法,位运算(n shr 16) or (n shl 16) 就是结果了。View Code 1 program p1201(input,output); 2 var 3 x:dword; 4 begin 5 assign(input,'p1201.in');reset(input); 6 assign(output,'p1201.out');re 阅读全文
posted @ 2012-03-11 16:09 Codinginging 阅读(222) 评论(0) 推荐(0) 编辑