[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 ...
随机推荐
- Android开发把项目打包成apk
做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为" ...
- 转载: C++ 转换构造函数 和 类型转换函数
1.对于系统的预定义基本类型数据,C++提供了两种类型转换方式:隐式类型转换和显式类型转换. ,sum; double b=5.55; sum=a+b;//-------(1) std::cout&l ...
- Linux下利用rsync实现多服务器文件同步
windows做为文件服务器,使用rsync的windows服务版本,然后配置好就可以了.需要的朋友可以参考下. windows做为文件服务器,使用rsync的windows服务版本:cwRsyncS ...
- linux优先级、性能监控指令
一.优先级 优先级的值=优先系数+nice值 优先系数由系统内核决定,不可更改 nice值可以手动更改,范围是 -20~19 优先级的值越低,优先级越高:优先级的值越高,优先级越低. 所以想调 ...
- 使用git命令提交远程github仓库的时候提示"rejected"(拒绝)解决办法
今天使用在自己笔记本本地磁盘上使用Git命令行执行"git push"然后输入github的用户名和密码之后,报如下错误: ![rejected] master->maste ...
- xcode 脚本编译,打包ipa
1.清理工程 /usr/bin/xcodebuild -target targetName clean 2.编译 /usr/bin/xcodebuild -target targetName buil ...
- C++ Primer 第三章 标准库类型vector+迭代器iterator 运算
1.vector: 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它也常被称作容器( ...
- Machine Learning - 第4周(Neural Networks: Representation)
Neural networks is a model inspired by how the brain works. It is widely used today in many applicat ...
- javaWeb1 tomcat
tomcat使用常见问题: 1.闪退: 原因:tomcat 软件是由java语言开发的,当它启动时,会默认到系统 的环境变量中查找 JAVA_HOME 的变量.找它的目的时tomcat 启动 时需要j ...
- Java 创建xml文件和操作xml数据
java中的代码 import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; ...