1 solutions
-
0
C++ :
#include<cstdio> #include<cstring> using namespace std; int t[110000]; int f[110000]; int mymax(int x,int y) { return x>y?x:y; } int main() { int n,T; while(scanf("%d%d",&n,&T)!=EOF) { for(int i=1;i<=n;i++) scanf("%d",&t[i]); memset(f,-1,sizeof(f)); f[0]=0; for(int i=1;i<=n;i++) { for(int j=T;j>=t[i];j--) { if(f[j-t[i]]!=-1) { f[j]=mymax(f[j],f[j-t[i]]+t[i]); } } } int ans=0; for(int i=1;i<=T;i++) ans=mymax(ans,f[i]); printf("%d\n",ans); } return 0; }Pascal :
var n, k, i, j : longint; a : array[1..100] of longint; f : array[0..100000] of longint; begin readln(n, k); for i := 1 to n do read(a[i]); fillchar(f, sizeof(f), 0); for i := 1 to n do for j := k downto a[i] do if f[j-a[i]] + a[i] > f[j] then f[j] := f[j-a[i]] + a[i]; writeln(f[k]); end.
- 1
Information
- ID
- 16689
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By