1 条题解
-
0
C :
#include <stdio.h> #include <string.h> int n; int a[33],d[20005]; int main(){ int w,i,j; scanf("%d%d", &w, &n); for (i = 0; i < n; i++){ scanf("%d", &a[i]); } memset(d, 0, sizeof(d)); for (i = 0; i < n; i++){ for (j = w; j >= a[i]; j--) if(d[j - a[i]] + a[i]>d[j]) d[j]=d[j - a[i]] + a[i]; } printf("%d\n", w - d[w]); return 0; }
C++ :
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> using namespace std; int a[100000],b[100000],f[100000],m,n,j,v,i; int main () { cin>>v>>n; for (i=1;i<=n;++i) cin>>a[i]; b[0]=1; for (i=1;i<=n;++i) for (j=v;j>=a[i];--j) if (b[j-a[i]]>0) b[j]=b[j]+b[j-a[i]]; /*for (i=1;i<=v;++i) cout<<b[i]<<" "; cout<<endl;*/ for (i=v;i>=1;--i) if (b[i]!=0) { v=v-i; cout<<v; break; } return 0; }
Pascal :
var v,n,i,j:longint; a,p:array[0..50000]of longint; begin readln(v); readln(n); for i:=1 to n do readln(a[i]); p[0]:=1; for i:=1 to n do for j:=v downto a[i] do if p[j-a[i]]=1 then p[j]:=1; for i:=v downto 1 do if p[i]=1 then break; writeln(v-i); end.
- 1
信息
- ID
- 810
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者