第一篇(Hay For Sale 购买干草)【动规】

来源:互联网 发布:网络公会白马义从 编辑:程序博客网 时间:2024/06/08 22:21

这是我的第一篇博文,也标志着OI之路的新起点

嗯,加油!


1606: [Usaco2008 Dec]Hay For Sale 购买干草

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 1186  Solved: 884
[Submit][Status][Discuss]

Description

    约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草.  顿因有H(1≤H≤5000)包干草,每一包都有它的体积Vi(l≤Vi≤C).约翰只能整包购买,
他最多可以运回多少体积的干草呢?

Input

    第1行输入C和H,之后H行一行输入一个Vi.

Output

 
    最多的可买干草体积.

Sample Input

7 3 //总体积为7,用3个物品来背包
2
6
5


The wagon holds 7 volumetric units; three bales are offered for sale with
volumes of 2, 6, and 5 units, respectively.

Sample Output

7 //最大可以背出来的体积





银组题,老师说没事多耍耍


一看题目背包,不说了,用01

uses math;varc,h,i,j,a:longint;f:array[-1..50001]of longint;//f[x]代表背包体积为x时,背包能装的最大体积begin        readln(c,h);        for i:=1 to h do                begin                        readln(a);                        for j:=c downto a do//一般的,不可写作 for j:=a to c do,此题除外                                        f[j]:=max(f[j],f[j-a]+a);//方程,如果用if语句会稍快                end;        writeln(f[c]);end.

总结:

1、动规一般两层循环:第一层一般为枚举物品(或物品重量、体积等);第二层一般为枚举剩余的价格(此题将体积与价格融为一体);

2、一般会有一个f数组,用f[x]来表示体积(或其他)为x时,最大价格(或效益)为f[x];

3、状态转移方程最基本为: f[i]:=max(f[i],f[i-当前枚举价格]),当然一般会更复杂;

4、最好用if语句,这样会比max稍快一些;




1 0
原创粉丝点击