303 条题解
-
0姜逸伦 LV 7 @ 2009-08-18 14:15:06
#include
using namespace std;
int main()
{int a[100],c[100],f[1000];
long i,n,m,j;
cin >>m>>n;
for (i=1;i>a[i]>>c[i];
for (i=0;i -
02009-08-17 15:47:04@
#include
using namespace std;
int main(){
int time=0,num=0,mtime[1001]={},mmoney[101]={},f[10001]={};
cin>>time;//采药时间
cin>>num;//草药的数目
for(int i=1;i>mtime[i]>>mmoney[i];//分别表示采摘某株草药的时间和这株草药的价值。
}
for(int i=1;i=mtime[i];j--){//从最后时间开始列举
if(f[j-mtime[i]]/*没有采药的时间的最大价值*/+mmoney[i]/*当前草药价值*/>f[j]/*采药后当前时间的最大价值*/){
f[j]=f[j-mtime[i]]+mmoney[i];//记当前时间最大价值为 没有采药的时间的最大价值+当前草药价值
}
}
}
cout -
02009-08-16 20:01:56@
var i,m,n,x:integer;
w:array[0..1000] of integer;
c:array[0..100] of integer;
f:array[0..10000] of integer;
begin
readln(m,n);
fillchar(f,sizeof(f),0);
for i:=1 to n do
readln(w[i],c[i]);
for i:=1 to n do
for x:=m downto w[i] do
if f[x-w[i]]+c[i]>f[x] then f[x]:=f[x-w[i]]+c[i];
writeln(f[m]);
end. -
02009-08-13 08:32:42@
就是01背包啊
-
02009-08-12 23:33:34@
01背包水啊
#include
typedef struct {
int v,jz;}node;
typedef node st[200];
st T;
int f[1010]={0},m,t;
void init()
{
int i;
scanf("%d%d",&t,&m);
for(i=1;if[j])
f[j]=f[j-T[i].v]+T[i].jz;
printf("%d",f[t]);
}
main()
{
init();
work();
return 0;
} -
02009-08-12 23:01:52@
卧槽,直接把开心的今明改了改,结果v和w数组开的仍然是25,偏偏大晚上的眼花了
就这么着害了我四次
Orz....... -
02009-08-12 15:27:26@
郁闷!!少了 f:=f 害我交了3次哩!!
-
02009-08-11 22:15:37@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms纪念50题-。- 。。
-
02009-08-10 23:36:21@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms01背包。。。。。 f[j]:=max(f[j-a[i]]+b[i],f[j])
-
02009-08-10 14:40:03@
写了一种奇怪的算法。。。。。。
var t,m,lt,a:integer;
st:array[1..100] of integer;
sc:array[1..100] of integer;
s:array[0..1000] of integer;
isgot:array[0..1000,1..100] of boolean;function max(a,b:integer):integer;
begin
if a>b then exit(a)
else exit(b);
end;begin
readln(t,m);
for a:=1 to m do
readln(st[a],sc[a]);
for lt:=1 to t do
for a:=1 to m do
begin
if st[a] -
02009-08-08 13:40:45@
又AC。。。
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar v,t:array[0..100] of integer;
f:array[0..100,0..1000] of integer;
i,j,m,n:integer;
begin
readln(m,n);
for i:=1 to n do
readln(t[i],v[i]);
fillchar(f,sizeof(f),0);
for i:=1 to n do
for j:=1 to m do
begin
f:=f;
if (j-t[i]>=0)and(f+v[i]>f) then
f:=f+v[i];
end;
writeln(f[n,m]);
End. -
02009-08-07 17:43:08@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms典型背包
-
02009-08-05 11:11:05@
#include
#define M 101
int f[1001];
int main()
{
int t,m,time[M],p[M],tmp;
int i,j,k;
scanf("%d %d",&t,&m);
for(i = 1;i = 0 && f[tmp]+p[i] > f[j]) {
f[j] = f[tmp] + p[i];
}
}
}
printf("%d",f[t]);
return 0;
}27JZY写的思路很清楚,建议看看。
-
02009-08-05 09:18:42@
var v,t:array[0..100] of integer;
f:array[0..100,0..1000] of integer;
i,j,m,n:integer;
begin
readln(m,n);
for i:=1 to n do
readln(t[i],v[i]);
fillchar(f,sizeof(f),0);
for i:=1 to n do
for j:=1 to m do
begin
f:=f;
if (j-t[i]>=0)and(f+v[i]>f) then
f:=f+v[i];
end;
writeln(f[n,m]);
End.
{本题明显为‘背包问题’,其中f二维数组中i记录草药编号,f记录
当剩余时间为j时的最大价值} -
02009-08-03 07:03:59@
01背包为什么楼下各位大牛都用二维数组额。。特殊情况最多2个一维数组互相更新就可以了吧。
-
02009-08-02 11:37:24@
var f:array[0..100,0..1000]of longint;
yt,ym:array[1..100]of integer;
i,j,k,n,m,t:longint;
function max (a,b:longint):longint;
begin
if(a>b)then max:=a
else max:=b;
end;
begin
readln(t,m);
for i:=1 to t do f[0,i]:=0;
for i:=1 to m do f:=0;
for i:=1 to m do read(yt[i],ym[i]);
for i:=1 to m do begin
for j:=1 to t do
if(yt[i] -
02009-07-28 23:03:19@
经典背包,纪念50题
-
02009-07-27 21:52:16@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms注意,可以仅拿一个数组做。
-
02009-07-26 20:54:44@
背包
动态规划里的水题
f:=max(f,f[i-1,j-a]+a); -
02009-07-24 14:46:22@
program p1104;
var
a:array[1..100,1..3]of integer;
i,j,t,m,x:integer;
b:array[1..100]of integer;
begin
read(t,m);
for i:=1 to m do
a:=i;
for i:=1 to m do
for j:=1 to 2 do
read(a);
for i:=1 to (m-1) do
for j:=i to m do
if a