#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精选] 第二章 动态规划(一)的更多相关文章

  1. [USACO精选] 第一章 数值计算

    好不容易坑来了传说中的USACO精选,近100题我要是能做完就哈哈哈哈了…继今天学并查集连番受挫之后,决定写一写基础题. #0 负二进制 2014-01-10 其实是想到就会做,不想到就不会做的题,数 ...

  2. (转)iOS Wow体验 - 第二章 - iOS用户体验解析(2)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第二部分,其余章节将陆续放出.上一 ...

  3. (转)iOS Wow体验 - 第二章 - iOS用户体验解析(1)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第一部分,其余章节将陆续放出.上一 ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  6. Jenkins入门系列之——02第二章 Jenkins安装与配置

    2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...

  7. Python黑帽编程 2.0 第二章概述

    Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...

  8. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  9. Asp.Net MVC4 + Oracle + EasyUI 学习 第二章

    Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...

随机推荐

  1. LA 5135 Mining Your Own Business

    求出 bcc 后再……根据大白书上的思路即可. 然后我用的是自定义的 stack 类模板: #include<cstdio> #include<cstring> #includ ...

  2. TCP拥塞控制

    TCP必须使用端到端拥塞控制而不是使网络辅助的拥塞控制,因为IP层不向端系统提供显式的网络拥塞反馈.TCP采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率. 几个相关 ...

  3. PacBio长reads的大基因组组装

    原文链接:Large Genome Assembly with PacBio Long Reads 可以以多种方式利用PacBio长reads来生成和改进大型基因组的de novo组装. 你可以用几种 ...

  4. ios CoreBluetooth 警告 is being dealloc'ed while pending connection

    ios CoreBluetooth 警告 is being dealloc'ed while pending connection CoreBluetooth[WARNING] <CBPerip ...

  5. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  6. 使用Eclipse构建Maven的SpringMVC项目

    一.直接建立Maven项目方法1.建立Maven项目 接下来使用Eclipse的maven构建一个web项目,以构建SpringMVC项目为例: 1.1 选择建立Maven Project 选择Fil ...

  7. iOS开发中深入理解CADisplayLink和NSTimer

    一.什么是CADisplayLink 简单地说,它就是一个定时器,每隔几毫秒刷新一次屏幕. CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器.我们在应用中创建一 ...

  8. 在CentOS 7 MySQL / MariaDB

    在CentOS7中,MariaDB  替代了MySQL;更多复杂的疑问可以在这里查看 MariaDB versus MySQL – Compatibility Install MySQL / Mari ...

  9. 《JavaScript权威指南》读书笔记(一)

    日期 2015-11-28 把之前的读书笔记在我弄丢它之前搬过来~~ 时间过去好久,回头一看理解都不一样了. 重点浏览了一下和Java的不同之处: js是一种宽松类型语言:js不区别整形数值与浮点型数 ...

  10. SQL Server数据库(SQL Sever语言 事务)

    事务:保障流程的完整执行保证程序某些程序在运行时同时成功同时失败,保证程序的安全性 begin tran --在流程开始的位置加 --此处写SQL语句 if @@error>0 --ERRORS ...