239 条题解
-
0木子日匀 LV 10 @ 2009-04-16 17:41:09
var v:integer;
f:array[0..20000] of boolean;
n,i,j,min:integer;
a:array[1..30] of integer;
begin
min:=0;
fillchar(f,sizeof(f),false);
f[0]:=true;
readln(v);
readln(n);
for i:= 1 to n do readln(a[i]);
for i:= 1 to n do
for j:= v downto a[i] do
if f[j-a[i]] then begin f[j]:=true; if j > min then min:=j ; end;
writeln(v-min);
end. -
02009-04-10 19:37:54@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
难度为2? -
02009-03-29 10:07:20@
#include
int max(int a,int b)
{
if(a>b)
return a;
else return b;
}
int main()
{
int i,j,v,n;
int f[30000]={0},g[100];
scanf("%d%d",&v,&n);
for(i=0;i -
02009-03-26 18:59:39@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
差点被气死了,这么简单的题目真是想复杂了,唉~~~~~~~~~~~ -
02009-03-21 11:10:53@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
哇,好神气耶 -
02009-02-21 18:20:37@
var
n:integer;
a:array[1..100] of integer;
b:array[1..100] of boolean;
min:longint;
vv,v:integer;
y:integer;
procedure tryy(wu:integer);
var i,j:integer;
begin
for i:=1 to n do begin
if b[i] then begin
if a[i] -
02009-01-30 20:32:49@
天哪,为什么CPP开不了20000*31的数组!!!
桂尔·阿玛拉桑编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案错误...程序输出比正确答案长 -
02009-01-19 10:25:55@
注意!
1:箱子可以装满.(虽然不写'if j>=a[i]'也可以过)
2:数组开大一点.好弱的数据啊!
-
02009-01-19 10:24:25@
var
v,m,n,i,j,t:longint;
a,b:array[0..20000]of longint;
begin
readln(v);
readln(n);
for i:=1 to n do
readln(a[i]);
for i:=1 to n do
for j:=v downto 1 do
if j-a[i]>=0
then if b[j-a[i]]+a[i]>b[j]
then b[j]:=b[j-a[i]]+a[i];
for i:=1 to v do
if b[i]>t
then t:=b[i];
write(v-t);
end.
好神奇啊!!!!!!!!!!!!!!!!!!!! -
02009-01-19 10:22:57@
var
v,m,n,i,j,t:longint;
a,b:array[0..20000]of longint;
begin
readln(v);
readln(n);
for i:=1 to n do
readln(a[i]);
for i:=1 to n do
for j:=v downto 1 do
if j-a[i]>=0
then if b[j-a[i]]+a[i]>b[j]
then b[j]:=b[j-a[i]]+a[i];
for i:=1 to v do
if b[i]>t
then t:=b[i];
write(v-t);
end.
好神奇啊!!!!!!!!!!!!!!!!!!!! -
02009-01-16 20:03:43@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-08-26 17:05:12@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar
v,n,i,j:integer;
vv:array[1..30] of integer;
f:array[0..20000] of integer;
begin
readln(v);readln(n);
for i:=1 to n do
readln(vv[i]);
for i:=1 to n do
for j:=v downto vv[i] do
if f[j-vv[i]]+vv[i]>f[j]
then f[j]:=f[j-vv[i]]+vv[i];
writeln(v-f[v]);
end.短小的dp(01背包)
其实重要的部分只有:
for i:=1 to n do
for j:=v downto vv[i] do
if f[j-vv[i]]+vv[i]>f[j]
then f[j]:=f[j-vv[i]]+vv[i]; -
02008-12-29 13:23:16@
PROGRAM JJ;
VAR
V,N,I,J,C,S:INTEGER;
A:ARRAY [1..20000] OF BOOLEAN;
BEGIN
ASSIGN(INPUT,'IN.IN');
RESET(INPUT);
ASSIGN(OUTPUT,'OUT.OUT');
REWRITE(OUTPUT);
READLN(V,N);
FOR I:=1 TO N DO
BEGIN
READ(C);FOR J:=S DOWNTO 1 DO
IF (A[J]) AND (C+JS THEN S:=J+C;
END;
IF (S+C -
02008-12-12 13:27:10@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram p1133;
const
maxv=20000;
maxn=30;
var
v,n,i,j:integer;
a:array[1..maxn] of integer;
f:array[0..maxv+1] of integer;
begin
readln(v);
readln(n);
for i:=1 to n do
readln(a[i]);
fillchar(f,sizeof(f),0);
for i:=1 to n do
for j:=v downto a[i] do
if f[j-a[i]]+a[i]>f[j]
then f[j]:=f[j-a[i]]+a[i];
writeln(v-f[v]);
end. -
02008-12-12 13:25:47@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram p1133;
const
maxv=20000;
maxn=30;
var
v,n,i,j:integer;
a:array[1..maxn] of integer;
f:array[0..maxv+1] of integer;
begin
readln(v);
readln(n);
for i:=1 to n do
readln(a[i]);
fillchar(f,sizeof(f),0);
for i:=1 to n do
for j:=v downto a[i] do
if f[j-a[i]]+a[i]>f[j]
then f[j]:=f[j-a[i]]+a[i];
writeln(v-f[v]);
end. -
02008-12-08 13:33:08@
program p1133;
var
a:array[1..30] of integer;
v,n,i,j:integer;
f:array[0..20000] of boolean;
begin
readln(v);
readln(n);
for i:=1 to n do readln(a[i]);
f[0]:=true;
for i:=1 to n do
for j:=v-a[i] downto 0 do
if f[j]=true then f[j+a[i]]:=true;
i:=v;
while not(f[i]) do dec(i);
writeln(v-i);
end. -
02008-12-06 18:55:40@
因为你的rp大涨。。
-
02008-11-28 23:05:19@
第一次全都是无输出。。。。发现i打成m了。。。
-
02008-11-28 09:10:15@
.........01背包居然2次才AC.....
var
i,j,n,w:integer;
v:array[0..30] of integer;
f:array[0..20000] of integer;
function max(a,b:integer):integer;
begin
if a=v[i] then f[j]:=max(f[j-v[i]]+v[i],f[j]);
writeln(w-f[w]);
end.
....第一次j循环没有downto.......我的AC率啊~~~ -
02008-11-13 17:27:22@
#include
using namespace std;
bool f[20005];
int n,v1,res;
int v[40];
int main( )
{
int i,j;
cin>>v1>>n;
f[0]=true;
for(i=1;i>v[i];
for(i=1;i=v[i];j--)
{
if(f[j-v[i]])
{f[j]=f[j-v[i]];
if(j>res) res=j;}
}
cout