摘要: DP,从左到右,从上到下 for 一遍,如果j为跟盖房子有点像,我只算了向下的三角,有人说要算向上的三角,但是还是A了......不知道什么原因。 1 program p1063; uses math; 2 var 3 i,j,k,l,m,n:longint; 4 s:array[1..300,1..300] of char; 5 f:array[1..300,1..300] of longint; 6 ch:char; 7 begin 8 read(n); 9 for i:=1 to n do10 begin11 rea... 阅读全文
posted @ 2012-10-18 08:59 改名字干什么 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 这道题.....感觉很难,主要是我觉得很难弄出方程式;方程式为f[i,j]=min(f[i-2,j-1]+s[i,j],f[i-1,j]);表示第j组到第i个人的残疾指数的最小值。注意每次for 次数的时候,直接for 到 i div 3就可以了,之后就没有意义了。 1 program P1061; uses math; 2 var 3 i,j,k,l,m,n,x:longint; 4 s:array[1..5500] of longint; 5 f:array[-1..5500,0..2000] of longint; 6 begin 7 {assign(in... 阅读全文
posted @ 2012-10-18 08:53 改名字干什么 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 一到DP题目,跟晴天小猪历险记之hill类似,光扫一次不够,设个布尔变量,确定不能再优时,退出循环,一开始本来以为要记录比自己低的和比自己高的,结果总是超时,后来发现其实只要记录二者之一就OK。代码: 1 program P1011; uses math; 2 var 3 i,j,k,l,m,n:longint; 4 bool:boolean; 5 s:array[0..501,0..501]of longint; 6 up,down:array[0..501,0..501]of longint; 7 begin 8 ... 阅读全文
posted @ 2012-10-17 20:29 改名字干什么 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 这道题,动规,但是如果只扫一次的话,往往发现得出来的解不是最优解的,所以要扫多次,知道确保没有变化了为止,说明就有最优解了;不一定要预处理,可以分情况讨论。还要加油啊 1 program P1006; uses math; 2 var 3 s:array[0..1010,0..1010]of longint; 4 f:array[0..1010,0..1010]of longint; 5 i,j,k,l,m,n,ans:longint; 6 bool:boolean; 7 begin 8 read(n); 9 ... 阅读全文
posted @ 2012-10-16 19:57 改名字干什么 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 模拟,单纯模拟会超时,但是有个定理:若从此地发现没油,则不必从头开始搜,直接从当前地开始就可以了。 1 program P1091; 2 var 3 n,m,i,j,k,l,l2,h,q,x,w:longint; 4 s,pow,ha:array[1..600000] of longint; 5 bool:boolean; 6 begin 7 read(n,l); 8 l2:=l; 9 for i:=1 to n do10 begin11 read(s[i],pow[i]);12 if s[i]<=... 阅读全文
posted @ 2012-10-14 21:22 改名字干什么 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 不知道是什么算法 1 program p1737; 2 var 3 i,j,k,l,h,w,left,right,b,ans,n,x,y,num,pmin:longint; 4 c,p,s:array[0..200010] of longint; 5 q:array[0..51,1..200010] of longint; 6 function haha(a,b:longint):boolean; 7 var 8 i:longint; 9 begin10 for i:=a to b do11 ... 阅读全文
posted @ 2012-10-13 21:01 改名字干什么 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 今天DP第二道题,采药,其实就是背包问题,不知道要是没看教程会不会做,但是没有看源码编出来,也算是一个不小的进步,嘿嘿。 1 program P1104; 2 uses math; 3 var 4 t,v:array[1..1001] of longint; 5 f:array[0..1001,0..1001]of longint; 6 t1,m,i,j,k,l:longint; 7 begin 8 fillchar(f,sizeof(f),0); 9 read(t1,m);10 for i:=1 ... 阅读全文
posted @ 2012-10-12 22:30 改名字干什么 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 好吧刚开始学DP,DP应该是确保每个子结构是最优的,递推式貌似很重要,想到递推式的话,程序实现应该不会很难。这道题的思想是:求以每一个点为终点的最长上升子序列和最长下降子序列,最后的序列即使每一个点的上升序列和下降序列之和减一 的最大值,ANS即为 N-最大值。代码: 1 program p1098; 2 var 3 a:array[0..200] of longint; 4 up,down,ans:array[0..200] of longint; 5 i,j,k,l,m,n,max:longint; 6 begin 7 rea... 阅读全文
posted @ 2012-10-12 21:07 改名字干什么 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 今天碰到一个搜索题,题目是:7.5 魔板【问题描述】 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格。每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗)。我们可以通过若干操作使魔板从一个状态改变为另一个状态。操作的方式有两种: (1)任选一行,改变该行中所有灯泡的状态,即亮的变暗、暗的变亮; (2)任选两列,交换其位置。 当然并不是任意的两种状态都可以通过若干操作来实现互相转化的。 你的任务就是根据给定两个魔板状态,判断两个状态能否互相转化。【输入】 文件中包含多组数据。第一行一个整数k,表示有k组数据。 每组数据的第一行两个整数n和m。(0<n,m≤100) 以下 阅读全文
posted @ 2012-10-09 22:29 改名字干什么 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 大概思路, 杨辉三角+递推,不是很难,可是被取模坑了,提交了5 ,6次才过。还要加油啊! 1 program P1739; 2 var 3 l,i,j,x,y,k,m,n,q:longint; 4 a:array[0..10000,0..10000] of longint; 5 begin 6 read(x,y,k,n,m); 7 a[1,1]:=x mod 10007; a[1,2]:=y mod 10007; 8 for i:=2 to k do 9 for j:=1 to i+... 阅读全文
posted @ 2012-10-08 21:43 改名字干什么 阅读(159) 评论(0) 推荐(0) 编辑