1 solutions
-
0
C :
#include<stdio.h> #include<stdlib.h> int f[2000001]; int i,j,n,k; int cost[51]; int max=0; int min(int u,int u1) { if(u<u1) return u; else return u1; } int main() { scanf("%d %d",&k,&n); int i; for(i=1;i<=n;i++) { scanf("%d",&cost[i]); if(cost[i]>max) max=cost[i]; f[cost[i]]=1; } for(i=1;i<=max*k+3;i++) if(f[i]==0)f[i]=327676767; for(i=1;i<=max*k+3;i++) for(j=1;j<=n;j++) if(i-cost[j]>=1) f[i]=min(f[i],f[i-cost[j]]+1); int ans=0,sum=0; while(f[ans+1]<=k) ans++; printf("%d\n",ans); return 0; }C++ :
#include<stdio.h> #include<string.h> int dp[2001000]; int min(int x,int y) { return x<y?x:y; } int main() { int n,k,i,j,a[100]; scanf("%d%d",&k,&n); memset(dp,0,sizeof(dp)); for (i=0;i<n;i++) { scanf("%d",&a[i]); dp[a[i]]=1; } for (i=1;;i++) { if (dp[i]!=0) continue; dp[i]=300; for (j=0;j<n;j++) { if (a[j]<i) dp[i]=min(dp[i],dp[i-a[j]]+1); } if (dp[i]>k) break; } printf("%d",i-1); return 0; }Pascal :
var a:array [1..50] of longint; f:array [0..2000000] of longint; k,n:longint; procedure init;inline; var i:longint; begin readln(k,n); for i:=1 to n do read(a[i]); end; procedure work;inline; var i,j,t,min:longint; begin for i:=1 to 2000000 do begin min:=maxlongint; for j:=1 to n do begin t:=i-a[j]; if t>=0 then if f[t]+1<min then min:=f[t]+1; end; f[i]:=min; if f[i]>k then break; end; writeln(i-1); end; begin init; work; end.
- 1
Information
- ID
- 19395
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By