168 条题解
-
0YY_0227 LV 8 @ 2009-08-10 16:28:16
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
二维背包
F 表示质量I, 体积J 时最大卡路里, 然后就是个背包
注意把数组开打一点, 我小家子气开400,结果WA了一会, 囧啊! -
02009-08-07 21:12:14@
二维背包
-
02009-08-06 15:20:21@
#include
#define M 400
typedef struct {
int v;
int m;
int e;
}food;
int f[M+1][M+1];
int max(int a,int b)
{
return (a>b)?a:b;
}
int main()
{
int maxv,maxm,n;
int i,j,k;
food t[51];
scanf("%d %d %d",&maxv,&maxm,&n);
for (i = 1;i = 0;k--) {
if ( j - t[i].v >= 0 &&k - t[i].m >= 0) {
f[j][k] = max(f[j-t[i].v][k-t[i].m]+t[i].e,f[j][k]);
}
}
}
}
printf("%d",f[maxv][maxm]);
return 0;
}
有了方程做这个不费吹灰之力了,哈哈 -
02009-08-05 10:43:49@
今天欣喜若狂啊 - -
终于自己写出一道动态规划的题了``
Var vm,mm:longint;
f:array[1..400,1..400] of longint;
i,n,v,m,k,a,b:longint;
Begin readln(vm,mm);
readln(n);
for i:=1 to n do
Begin
readln(v,m,k);
for a:=vm downto v do
for b:=mm downto m do
if f[a,b] -
02009-08-02 10:24:54@
编译通过...
├ 测试数据 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-27 11:38:11@
背包问题,博大精深。。。。。。
-
02009-07-22 15:50:10@
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms#include
void main()
{
int i,j,k,v,w,n,food[52][3]={0},record[502][502]={0};
scanf("%d%d",&v,&w);
scanf("%d",&n);
for(i=1;i=food[i][1];k--)
{
if(record[j-food[i][0]][k-food[i][1]]+food[i][2]>record[j][k])
{
record[j][k]=record[j-food[i][0]][k-food[i][1]]+food[i][2];
}
}
}
}
printf("%d\n",record[v][w]);
}哈哈,这个题很简单嘛,二维背问题今天刚好研究完就刚好碰上了这个题,所以非常轻松!!!!
-
02009-07-21 17:17:18@
program p1334;
var v,m,w:array[1..50] of longint;
i,j,k,l,n,o,p,q,maxv,maxm:longint;
f:array[0..400,0..400] of longint;
function max(x,y:longint):longint;
begin if x>y then exit(x);exit(y);end;
begin
readln(maxv,maxm);
readln(n);
for i:=1 to n do
readln(v[i],m[i],w[i]);
for i:=1 to n do
for j:=maxv downto v[i] do
for k:=maxm downto m[i] do
f[j,k]:=max(f[j,k],f[j-v[i],k-m[i]]+w[i]);
writeln(f[maxv,maxm]);
end. -
02009-07-13 15:23:17@
又因为传说中的“assign"问题WA了一次。。。
EASY!!!
庆祝41题!冲向50!! -
02009-06-21 19:21:41@
背包变种!
#include
int d[401][401]={0};
int main()
{
int i,j,k,V,M,n;
int v[51],m[51],h[51];
scanf("%d%d%d",&V,&M,&n);
for(i=0;i=m[i];k--)
d[j][k]=(d[j-v[i]][k-m[i]]+h[i]>d[j][k]?d[j-v[i]][k-m[i]]+h[i]:d[j][k]);
printf("%d\n",d[V][M]);
return 0;
} -
02009-05-30 19:08:29@
这也敢叫难度2??
-
02009-05-30 16:23:41@
f[j,k]:=max(f[j,k],f[j-a[i],k-b[i]]+c[i]);
-
02009-05-26 15:45:25@
program lc;
var
ma,w,r,n:longint;
v,m,c:array[1..500] of longint;
f:array[0..51,0..401,0..401] of longint;
function max(a,b:longint):longint;
begin
if a>b then max:=a else max:=b;
end;procedure init;
var
i:longint;
begin
readln(w,r);
readln(n);
for i:=1 to n do
readln(v[i],m[i],c[i]);
end;procedure dp;
var
i,j,k:longint;
begin
for i:=1 to n do
for j:=v[i] to w do
for k:=m[i] to r do
begin
f:=max(f,f+c[i]);
if f>ma then ma:=f;
end;
end;begin
init;
dp;
writeln(ma);
end.编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 05:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 06:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 07:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 08:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 09:答案错误... ├ 标准行输出
├ 错误行输出
├ 测试数据 10:答案错误... ├ 标准行输出
├ 错误行输出
---|---|---|---|---|---|---|---|-
Unaccepted 有效得分:30 有效耗时:0ms这是怎么回事?
-
02009-05-22 15:34:58@
const maxn=401;
var f:array[0..maxn,0..maxn]of longint;
a,b,c,l,i,j,n,m:longint;
begin
readln(n,m);
readln(l);
for l:=1 to l do begin
readln(a,b,c);
for i:=n downto a do
for j:=m downto b do
if f+c>fthen
f:=f+c;
end;
writeln(f[n,m]);
end. -
02009-05-08 17:39:41@
二维费用的01背包,只是多了一层循环而已
-
02009-05-03 16:03:32@
max{f,f+p[i]}
j是>=v[i]的
h是>=w[i]的
注意下。。。不然740那组会输出700教训!
-
02009-05-01 14:59:03@
puppy就是好啊,最笨的方程也0ms:
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
是有2个“背包容量”的01背包,
最笨的动态转移方程如下:(遇上6k就是人品问题啦!!等puppy吧!!!)
f:=
max{f,f+p[i]}
超时的别骂我······· -
02009-04-11 23:54:04@
#include
using namespace std;
int f[400][400],V,M,N,v[50],m[50],w[50];
int main()
{
cin >> V >> M >> N;
for(int i = 0;i < N;i++) cin >> v[i] >> m[i] >> w[i];for(int i = 0;i < N;i++)
for(int vi = V;vi >= v[i];--vi)
for(int mi = M;mi >= m[i];--mi)
{
if(i == 0) f[vi][mi] = w[i];
else f[vi][mi] = max(f[vi-v[i]][mi-m[i]]+w[i],f[vi][mi]);
}
cout -
02009-04-11 23:35:58@
so easy的二维背包,就是加了个限制条件,判断条件是< > 号千万别反了,我就是因为这个重交了好几次。。。。。
貌似我这个没有0ms,似乎有待优化~
f[vi][mi][i] = max(f[vi-v[i]][mi-m[i]]+w[i],f[vi][mi]); -
02009-04-01 20:18:07@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
program ma;
var
v,m,n,i,j,k:longint;
a,b,c:array[1..10000] of longint;
f:array[0..1000,0..1000] of longint;
begin
readln(v,m);
readln(n);
for i:=1 to n do
read(a[i],b[i],c[i]);
for i:=1 to n do
begin
for j:=v downto a[i] do
for k:=m downto b[i] do
if f[j-a[i],k-b[i]]+c[i]>f[j,k] then
f[j,k]:=f[j-a[i],k-b[i]]+c[i];
end;
write(f[v,m]);
end.
二维01背包……
终于破百了……101题……
庆祝下……