1 条题解
-
0
C :
#include<stdio.h> int f[20001]; int w[31],c[31]; int N=0,M=0; int main() { scanf("%d%d",&M,&N); for(int i=1;i<=N;++i) { scanf("%d",&w[i]); c[i]=w[i]; } for(int i=1;i<=N;++i) { for(int j=M;j>=w[i];--j) { if(f[j-w[i]]+c[i]>f[j]) { f[j]=f[j-w[i]]+c[i]; } } } printf("%d",M-f[M]); return 0; }
C++ :
#include <cstdio> using namespace std; int m,n; int w[20001]; int f[20001]; int main() { scanf("%d%d",&m,&n); for (int i=1;i<=n;i++) { scanf("%d",&w[i]); } for(int i=1;i<=n;i++) for(int v=m;v>=w[i];v--) { if(f[v-w[i]]+w[i]>f[v]) { f[v]=f[v-w[i]]+w[i]; } } printf("%d\n",m-f[m]); return 0; }
Pascal :
var f:array[0..200000] of boolean; c:array[1..30] of longint; i,j,n,v:longint; begin readln(v,n); fillchar(f,sizeof(f),false); for i:=1 to n do read(c[i]); f[0]:=true; for i:=1 to n do for j:=v downto c[i] do f[j]:=f[j-c[i]] or f[j]; for i:=v downto 0 do if f[i] then begin writeln(v-i); break; end; end.
- 1
信息
- ID
- 787
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者