1 solutions
-
0
C :
#include<stdio.h> int v,n,i,j,k,a[31]; int f[20001]; int main() { scanf("%d%d",&v,&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); f[0]=1; for(i=1;i<=n;i++) for(j=v;j>=a[i];j--) if(!f[j]&&f[j-a[i]]) f[j]=1; k=v; for(;k>1&&!f[k];k--); printf("%d\n",v-k); return 0; }C++ :
#include<iostream> #include<algorithm> #include<cstring> #include<ctime> #include<cmath> #include<string> #include<cstdio> using namespace std; int a[35], n, res; void dfs(int k, int V) { if(V < res) res = V; if(k == n) return; dfs(k+1, V); if(V >= a[k]) dfs(k+1, V-a[k]); } int main() { int V; cin>>V>>n; for(int i = 0; i < n; ++i) cin>>a[i]; res = V; dfs(0, V); cout<<res<<endl; return 0; }Pascal :
var f:array[0..20000]of boolean; v,m,i,j,o,max:longint; begin //assign(input,'boxes.in'); reset(input); //assign(output,'boxes.out'); rewrite(output); readln(v); readln(m); f[0]:=true; for i:=1 to m do begin readln(o); for j:=v downto 0 do if (j+o<=v)and(f[j]) then f[j+o]:=true; end; for j:=0 to v do if f[j] then max:=j; writeln(v-max); //close(output); end.Java :
import java.util.*; public class Main { public static void main(String[] args){ int v; int n; int[] a; Scanner sc= new Scanner(System.in); while(sc.hasNext()){ v=sc.nextInt(); n=sc.nextInt(); a=new int[n]; for(int i=0;i<n;i++) a[i]=sc.nextInt(); int result=inornot(a,0,v); System.out.println(result); } sc.close(); } public static int inornot(int[] a,int i,int v){ if(i>=a.length) return v; else{ if(a[i]>v){ return inornot(a,i+1,v); } else{ int n=v-a[i]; int m=inornot(a,i+1,n); int k=inornot(a,i+1,v); if(m<k) return m; else return k; } } } }
- 1
Information
- ID
- 16318
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By