- 采药
- 2009-05-03 11:46:28 @
我的思路是这样的:
定义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 条评论
-
义乌市吴奇隆丶 LV 6 @ 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