摘要:
有一个仓库,在时间段[M,E]需要一直被打扫。现在有n头奶牛来干这项工作。每头奶牛都有一个工作时间段[start,final],并且需要付的费用是cost。问题是聘用哪些奶牛能使费用最少?允多头奶牛在同一时间工作。先把区间按照final升序排列,然后进行DP,考虑到范围较大,O(L^2)超时,引入线段树进行优化,将决策的复杂度降到logn。还要输出-1,WA死了。。。这是我的pku第100题,庆祝啊,激动死了。。View Code 1 program pku3171(input,output); 2 type 3 node=record 4 left,righ... 阅读全文
摘要:
有n个火车站,从一个站点到另一个站点的费用C与它们的距离L有关,有3种距离,对应有3种费用。现在求从一个站点S到另一个站点E所需的最小费用。很简单的DP,难度等价于数字三角形,注意:输入中起点不一定大于终点View Code 1 program pku2355(input,output); 2 var 3 f :array[0..10010] of longint; 4 d :array[0..10010] of longint; 5 l,c :array[1..3] of longint; 6 x,y :longint; 7 ... 阅读全文
摘要:
准确的说,这个题叫递推,不叫DP,用f[i,j]表示长度为i,和为j的方案数f[i,j]=∑f[i-1,j-k]边界见程序。View Code 1 program pku2346(input,output); 2 var 3 f:array[0..5,0..45] of int64; 4 answer:array[0..11] of int64; 5 n:longint; 6 i,j,k:longint; 7 begin 8 fillchar(f,sizeof(f),0); 9 for i:=0 to 9 do10 f[1,i]... 阅读全文
摘要:
一道经典贪心题,用并查集来优化。万恶的pku,这题pascal读入必须用seekeof判断是否读完数据,否则WA死你。。。View Code 1 program pku1456(input,output); 2 var 3 x,w :array[0..11000] of longint; 4 f :array[0..11000] of longint; 5 n :longint; 6 answer :longint; 7 procedure swap(var aa,bb:longint); 8 var 9 ... 阅读全文
摘要:
最大的移动时间取决于被经过次数最多的一个房间,把每个移动看做一个区间,覆盖1-400的点,特别的,有时区间端点需要加减,因为它会影响后面一个点(前面一个点)。View Code 1 program pku1083(input,output); 2 var 3 cover:array[0..801] of integer; 4 x,y,n:longint; 5 cases:longint; 6 i,j:longint; 7 answer:longint; 8 procedure swap(var aa,bb:longint); 9 var10 t... 阅读全文
摘要:
求一个图中到其他点的最短路的最大值最小的点和这个值。floyd一遍完事View Code 1 program pku1125(input,output); 2 var 3 f:array[0..300,0..300] of longint; 4 n:longint; 5 procedure init; 6 var 7 i,j,s,x,y:longint; 8 begin 9 fillchar(f,sizeof(f),30);10 for i:=1 to n do11 begin12 read(s);13 for ... 阅读全文
摘要:
这道题需要涉及到置换群的知识,只需知道一个定理。最小交换次数=元素个数-环的个数。View Code 1 program pku1674(input,output); 2 var 3 number :array[0..11000] of integer; 4 v :array[0..11000] of boolean; 5 n,cases:longint; 6 answer :longint; 7 procedure init; 8 var 9 i:longint;10 begin11 readln(n);12 for i:... 阅读全文
摘要:
石头剪刀布,每个人出什么已知,你可以决定他们游戏的顺序,有多少人有可能赢分情况:1:对于石头剪刀布都有的情况,这个值是n 2:对于只有两种的情况,答案是两种对抗能赢得那种的人数 3:只有一种的情况,答案是nView Code 1 program pku2232(input,output); 2 var 3 n,i :longint; 4 c,s,f:longint; 5 ss:ansistring; 6 begin 7 while not eof do 8 begin 9 c:=0;s:=0;f:=0;10 ... 阅读全文
摘要:
统计字符串中各个字母出现的次数并且输出一个柱状统计图,注意用鼠标去划一下,每两个‘*’柱之间有空格。。其他的就是模拟了,水题View Code 1 program pku2136(input,output); 2 var 3 map :array[0..73,'A'..'Z'] of boolean; 4 number:array['A'..'Z'] of integer; 5 max:longint; 6 procedure init; 7 var 8 s:ansistring; 9 i,j:longint;10 begin11 阅读全文
摘要:
MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0编号山脚的树是1w[i]表示从1号到i号节点的树的总质量。d[i]表示第i棵树距离山脚的锯木厂的距离。g[i]表示从i到n棵树都运到i地的锯木厂所用的费用。h[i]表示从1到i棵树都运到山底锯木厂所用的费用。f[i]表示中间的锯木厂建设在i处所用过的最小费用。MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0很容易写出朴素方程 f[i]=h[i-1]+g[j]+ h[j-1]-h[i]-(w[j-1]-w[i])* 阅读全文
摘要:
题目不在累述,在RQNOJ或八中上都有。朴素方程很好写f[i]=max{f[j]+a*sqr(s[i]-s[j])+b*(s[i]-s[j])+c}典型的1D/1D方程,有数据范围来看,一定有O(n)算法,于是模式基本就确定下来了,我们要对方程进行变形。设对于f[i]决策x优于y且x<y则:f[x]+a*(s[i]-s[x])*(s[i]-s[x])+b*(s[i]-s[x])+c>f[y]+a*(s[i]-s[y])*(s[i]-s[y])+b*(s[i]-s[y])+c→f[x]+a*s[i]*s[i]-2*a*s[i]*s[x]+a*s[x]*s[x]+b*s[i]-b*s[ 阅读全文