/ Vijos / 讨论 / 采药 /

求助-采药

我的思路是这样的:

定义a[n]用来保存时间;

c[n]用来保存价值;

设f[i]为采到第i个的最大价值;

w[i]为采到第i个的总时间;

f[i]=max{f[1],f[2],..f}+c[i],a[i]+w[i]

3 条评论

  • @ 2014-05-15 15:52:31

    var k,v:array[1..100] of integer;
    f:array[0..1001] of integer; t,m,i,j:integer; function max(x,y:integer):integer;
    begin if x>y then max:=x else max:=y; end; begin
    readln(t,m); for i:=1 to m do readln(k[i],v[i]); for i:=1 to m do for j:=t downto 1 do if j-k[i]>=0 then f[j]:=max(f[j],f[j-k[i]]+v[i]); write(f[t]); end.

  • @ 2009-05-03 21:32:51

    今日看了01背包了,呵呵!

    #include

    int f[101][1001]={0},w[101]={0},p[101]={0};

    int time,m;

    int main()

    {

    int i,j;

    scanf("%d %d",&time,&m);

    for(i=1;i

  • @ 2009-05-03 14:17:14

    其实就是01背包

    牛···有这么复杂哒,就是赤裸裸的01背包啊

    时间相当于“质量”

    价值····就是价值

    用DP做,0MS秒杀!

  • 1

信息

ID
1104
难度
4
分类
动态规划 | 背包 点击显示
标签
递交数
16820
已通过
6526
通过率
39%
被复制
38
上传者