1 条题解
-
0
C :
#include <stdio.h> #include <string.h> #define MAX 20001 int main(void) { int m,n,tv,v,i,j,k ; int a[MAX] ={0} ; a[0] = 1; scanf("%d",&v) ; scanf("%d",&n) ; for(i=1 ; i<= n ; i++) { scanf("%d",&tv); for(j=v ; j>=tv ; j--) if(!a[j]) a[j] = a[j-tv] ; } m = v ; while ( a[m] == 0) m -- ; printf("%d ",v-m) ; return 0 ; }
C++ :
#include<iostream> #include<cstdio> #include<cmath> using namespace std; int f[50000],w[4000],i,j,n,m;; int main () { cin>>m; cin>>n; for (i=1; i<=n; i++) cin>>w[i]; for (i=1; i<=n; i++) for (j=m; j>=w[i]; j--) f[j]=max(f[j-w[i]]+w[i],f[j]); cout<<m-f[m]; }
Pascal :
program bb; var w,v:array[0..20005] of longint; f:array[0..20005] of longint; vv,n,i,j:longint; begin read(vv,n); for i:=1 to n do read(v[i]); for i:=1 to n do for j:=vv downto v[i] do if f[j-v[i]]+v[i]>f[j] then f[j]:=f[j-v[i]]+v[i]; writeln(vv-f[vv]); end.
Java :
import java.util.Scanner; /** * Created by ResiakFX on 2017/2/26 0026. */ public class Main { public static void main(String[] args){ Scanner in=new Scanner(System.in); while(in.hasNext()){ int V=in.nextInt(); int N=in.nextInt(); int[] a=new int[N]; for(int i=0;i<N;i++)a[i]=in.nextInt(); int[][] d=new int[N][V+1]; for(int i=0;i<N;i++){ for(int j=1;j<=V;j++){ if(i==0)d[0][j]=a[0]>j?0:a[0]; else{ d[i][j]=d[i-1][j]; if(j>=a[i] && d[i-1][j-a[i]]+a[i]>d[i][j]) d[i][j]=d[i-1][j-a[i]]+a[i]; } } } System.out.println(V-d[N-1][V]); } } }
- 1
信息
- ID
- 847
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者