1 条题解
-
0
C :
#include<stdio.h> #include<string.h> int max(int a,int b) { if (a<b) return b; else return a; } int main() { int box[31]; int V,n,max_V[20000]; memset(box,0,sizeof(box)); scanf("%d %d",&V,&n); for(int i=1;i<=n;i++) { scanf("%d",&box[i]); } for(int x=1;x<=n;x++) { for(int y=V;y>=1;y--) { if(box[x]<=y) max_V[y]=max(max_V[y],max_V[y-box[x]]+box[x]); } } printf("%d\n",V-max_V[V]); return 0; }
C++ :
#include<iostream> #include<algorithm> using namespace std; const int N(1005); int f[N]={0}; int main() { // ifstream cin("medic.in"); // ofstream cout("medic.out"); int T,M,t,v; while (cin>>T>>M) { fill(f,f+N,0); for (int i=0;i<M;i++) { cin>>t>>v; for (int j=T;j>=t;j--) f[j]=max(f[j],v+f[j-t]); } cout<<f[T]<<endl; } // system("pause"); return 0; }
Pascal :
var n,v,i,j:longint;a,p:array[0..1000] 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 begin if p[j-a[i]]=1 then p[j]:=1; end; for i:=v downto 1 do if p[i]=1 then begin writeln(v-i);break; end; end.
Java :
import java.util.Scanner; public class Main{ static int[] w = new int[20005]; static int[] a = new int[20005]; public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNextInt()){ int v = in.nextInt(); int n = in.nextInt(); for(int i=1;i<=n;i++){ a[i] = in.nextInt(); } for(int i=1;i<=n;i++){ for(int j=v;j>=1;j--){ if(j<a[i]) w[j] = Math.max(w[j-1],w[j]); else w[j] = Math.max(w[j],w[j-a[i]]+a[i]); } } System.out.println(v-w[v]); } } }
- 1
信息
- ID
- 751
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者