[USACO精选] 第二章 动态规划(一)
#4 公司利润 2014-01-16
这真的是动归?怎么觉得有点贪心的心态在。时间复杂度O(N),空间复杂度O(1),轻松加愉快!唯一要注意的是ANS一开始要赋负值,因为最终答案可能是负的。
program usaco_;
var n,i,x,ans,last:longint;
a:array[..] of longint;
begin
ans:=-maxlongint+;
readln(n);
for i:= to n do
begin
readln(x);
if last> then last:=x+last else last:=x;
if last>ans then ans:=last;
end;
writeln(ans);
end.
公司利润
#5 接住苹果 2014-01-17
亲娘说:“我给你榨胡萝卜汁吧,10分钟就好。”我说:“嗯,看我十分钟能不能把这题写出来。”差不多刚好十分钟,因为亲娘用了五分钟不到就榨好了…
a[i,j,p]表示第i只苹果掉落后,经过j次移动,最后一次接苹果是在p树下可以接到的最多苹果树。
可以优化的地方就是,反正计算a[i,j,p]只是和a[i-1,j-1,1..2]和a[i-1,j,1..2]有关嘛,所以不开数组应该也无妨吧。
写的时候犯了两个小错误:(1)for j:=0 to k do 写成了1 to k;(2)把循环里的j都写成了k… 都是脑残错误…
program usaco_;
var a:array[..,-..,..] of integer;
q:array[..,..] of word;
n,k,i,j,p1,p2,t,ans:integer;
begin
readln(n,k);
for i:= to n do
begin
readln(t);
q[i,t]:=;
end;
ans:=-+;
for i:= to n do
for j:= to k do
begin
p1:=a[i-,j,]+q[i,];p2:=a[i-,j-,]+q[i,];
if p1>p2 then a[i,j,]:=p1 else a[i,j,]:=p2;
if a[i,j,]>ans then ans:=a[i,j,];
p1:=a[i-,j,]+q[i,];p2:=a[i-,j-,]+q[i,];
if p1>p2 then a[i,j,]:=p1 else a[i,j,]:=p2;
if a[i,j,]>ans then ans:=a[i,j,];
end;
writeln(ans);
end.
接住苹果
BTW,这题因为是NOV04的题目,找数据找了会儿…最后发现只要改这个网址的最后就行了:http://cerberus.delos.com:794/NOV04
#6 方形牛棚 2014-01-17
似乎做过类似的题,似乎知道是四个小正方形拼成一个大的,就是脑残没想出动态转移方程:a[i,j]:=min(a[i-1,j],a[i-1,j-1],a[i,j-1])+1 {a[i,j]表示以(i,j)为右下角可取的正方形的最大边长} 现在处于脑残题也做不来,难题也不会的境界啊…
BTW,此题也是USACO Training 5.3.4。
program usaco_;
var a,map:array[..,..] of word;
n,m,i,j,tx,ty,ans:integer; function min(x,y,z:integer):integer;
begin
min:=x;
if y<min then min:=y;
if z<min then min:=z;
end; begin
readln(n,m);
for i:= to m do
begin
readln(tx,ty);
map[tx,ty]:=;
end;
for i:= to n do
for j:= to n do
if map[i,j]<> then
begin
a[i,j]:=min(a[i-,j],a[i-,j-],a[i,j-])+;
if a[i,j]>ans then ans:=a[i,j];
end;
writeln(ans);
end.
方形牛棚
其实做不大的改动也可成为求最大的矩形牛棚的程序。
#7 滑雪课程 2014-01-22
脑残的我回来了,被这道三星的题目坑死!错误主要有以下:
(1)没有考虑有没有获得能力的边界,解决办法:开始都赋初值-1,非-1才表示能力达到,可操作。
(2)work2过程的参数弄错,主程序里的i和过程里的i混了…解决办法,添加参数x,y。
(3)f[i,j]表示第i分钟结束后,以j的能力值可以划的最多次数。在算课程的时候,我不小心把i当开始时间了。解决办法:+1
总之这题从昨天做死都做不出来查不出错,到看别人解题觉得和我自己的一样,到睡觉前想怎么解决到失眠,到今天早上物理课没心情听还在想…啊啊啊我的DP水平是有多糟糕啊…最后程序只有60-行
program usaco_;
type rec=record
start,last,level:integer;
end;
var l:array[..] of longint;
f:array[-..,..] of longint;
r:array[..] of rec;
mark:array[..] of boolean;
t,s,n,i,j,c,d,temp,ans,maxa:longint; procedure work2(x,y:integer);
var i:integer;
begin
for i:= to s do
if r[i].start=x+ then
if f[x,y]>f[x+r[i].last,r[i].level] then
f[x+r[i].last,r[i].level]:=f[x,y];
end; begin
fillchar(mark,sizeof(mark),false);
readln(t,s,n);
for i:= to s do
begin
readln(r[i].start,r[i].last,r[i].level);
if r[i].level>maxa then maxa:=r[i].level;
mark[r[i].start]:=true;
end;
for i:= to do
l[i]:=;
for i:= to n do
begin
readln(c,d);
if l[c]>d then l[c]:=d;
end;
for i:= to do
if l[i-]<l[i] then l[i]:=l[i-];
for i:= to t do
for j:= to maxa do
f[i,j]:=-;
f[,]:=;
for i:= to t do
for j:= to maxa do
begin
if f[i,j]<>- then
begin
if f[i,j]>f[i+,j] then f[i+,j]:=f[i,j];
if i+l[j]<=t then
if f[i,j]+>f[i+l[j],j] then f[i+l[j],j]:=f[i,j]+;
if mark[i+] then work2(i,j);
end;
end;
for j:= to do
if f[t,j]>ans then ans:=f[t,j];
writeln(ans);
end.
滑雪课程
P.S. 我拿到的题目的output里有注释,坑子的是这个注释竟然是错的!!正确的应该是3-4去上课,5-10在滑雪。
#8 滑雪比赛
终于没看解题,不过做的过程略脑残,一开始只想到转移方程的其一,后来才想到要判断,就是分(1)从T[i]到T[i+1]的路程没办法使速度从S[i]加到S[i+1] (2)从T[i]到T[i+1]的路程没办法使速度从S[i]降到S[i+1] 问题(1)写在转移方程的第二段里,(2)写在前面的预判里,直接对S数组进行处理。我相信还有别的处理方法,总之觉得自己写烦了。
还要注意有可能是通过重点的时候达到最大速度,再特判一个即可。
顺便0-0这真的是动归?我对我自己对DP的理解表示怀疑…第二章至此完美结束。
program usaco_;
var t,s,f:array[..+] of longint;
n,i,j,l,max,temp:longint;
procedure qsort(l,r:longint);
var i,j,mid,temp:longint;
begin
i:=l;j:=r;mid:=t[(l+r) div ];
repeat
while t[i]<mid do inc(i);
while t[j]>mid do dec(j);
if i<=j then
begin
temp:=t[i];t[i]:=t[j];t[j]:=temp;
temp:=s[i];s[i]:=s[j];s[j]:=temp;
inc(i);dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if j>l then qsort(l,j);
end; begin
readln(l,n);
for i:= to n do
readln(t[i],s[i]);
qsort(,n);
for i:=n- downto do
if (s[i]-s[i+])>(t[i+]-t[i]) then
s[i]:=s[i+]+(t[i+]-t[i]);
t[]:=;s[]:=;f[]:=;
for i:= to n- do
begin
if (s[i+]-f[i])<=(t[i+]-t[i]) then
begin
temp:=trunc((t[i+]-t[i]+s[i+]+f[i])/);
f[i+]:=s[i+];
end
else
begin
temp:=f[i]+(t[i+]-t[i]);
f[i+]:=temp;
end;
if temp>max then max:=temp;
end;
if f[n]+(l-t[n])>max then max:=f[n]+(l-t[n]);
writeln(max);
end.
滑雪比赛
[USACO精选] 第二章 动态规划(一)的更多相关文章
- [USACO精选] 第一章 数值计算
好不容易坑来了传说中的USACO精选,近100题我要是能做完就哈哈哈哈了…继今天学并查集连番受挫之后,决定写一写基础题. #0 负二进制 2014-01-10 其实是想到就会做,不想到就不会做的题,数 ...
- (转)iOS Wow体验 - 第二章 - iOS用户体验解析(2)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第二部分,其余章节将陆续放出.上一 ...
- (转)iOS Wow体验 - 第二章 - iOS用户体验解析(1)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第一部分,其余章节将陆续放出.上一 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...
- Jenkins入门系列之——02第二章 Jenkins安装与配置
2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...
- Python黑帽编程 2.0 第二章概述
Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...
- 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型
第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...
- Asp.Net MVC4 + Oracle + EasyUI 学习 第二章
Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...
随机推荐
- Spring MVC 数据绑定(四)
Spring支持多种形式的类型绑定,包括: 1.基本数据类型.String和String[] 2.简单对象类型 3.List类型 4.Set类型 5.Map类型 6.复合数据类型 接下 ...
- js 删除多个相同name元素。
var obj = document.getElementsByName("abc"); for(var i = 0;i<(obj.length) * 2;i++){ obj ...
- 图片(img标签)的onerror事件
打开网页时提示 Stack overflow at line: 0.我做了截图如下: 经过分析,发现网页中存在类似如下的代码: <img src="pic.gif" oner ...
- 【bzoj1047】理想的正方形
[bzoj1047]理想的正方形 题意 给定\(a*b\)由整数组成的矩形. 现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值 的差最小. \(1\leq a,b\leq 10 ...
- 元素过滤器(Element Filters)
元素过滤器可以同选择器一起使用, 从一堆候选元素中进行筛选.它们当前仅使用于’name’元素选择器.过滤器看起来更像是选择器,也就是:filterType=argument所支持的元素过滤器为:val ...
- cssText在 IE6/7/8和chrome/Firefox/IE9+的不同
一,结尾没有分号 <div style="font-size:14px;">test</div> <script type="text/ja ...
- js--题目二
//如何获取下面代码所有元素. <form> <input name="" type="text" /> <input name= ...
- postgresql 索引
1.B-tree索引 create index idx_contacts_name on contacts(name); 2.数组索引 create index idx_contacts_phone ...
- SqlServer关闭与启用标识(自增长)列
1 --添加新列 2 ALTER TABLE TABLENAME ADD ID int 3 --赋值 4 UPDATE TABLENAME SET ID = IDENTITY_ID 5 --删除标识列 ...
- java中的异常和处理
算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...