1 solutions
-
0
C :
#include<stdio.h> int dp[30001], v[26], w[26]; int max(int a,int b) { if(a>b) return a; else return b; } int main() { int N, m,i,j; scanf("%d%d",&N,&m); for(i=0;i<m;i++) scanf("%d%d",&v[i],&w[i]); dp[0]=0; for(i=0;i<m;i++) for(j=N;j>=v[i];j--) dp[j] = max(dp[j],dp[j-v[i]]+v[i]*w[i]); printf("%d\n",dp[N]); return 0; }C++ :
#include<iostream> #include<algorithm> #include<cstring> #include<ctime> #include<cmath> #include<string> #include<cstdio> using namespace std; int V, m, res = 0; struct node{ int v, w; }P[30]; void dfs(int k, int v, int r) { if(r > res) res = r; if(k == m + 1) return; dfs(k + 1, v, r); if(v > P[k].v) dfs(k + 1, v - P[k].v, r + P[k].w); } int main() { cin>>V>>m; for(int i = 1; i <= m; ++i) { cin>>P[i].v>>P[i].w; P[i].w *= P[i].v; } dfs(0, V, 0); cout<<res<<endl; return 0; }Pascal :
var n,m,w,c,i,j:longint; f:array[0..100000]of longint; begin readln(n,m); for i:=1 to m do begin readln(w,c); c:=c*w; for j:= n downto w do if f[j-w]+c>f[j] then f[j]:=f[j-w]+c; end; for i:=2 to n do if f[i]>f[1] then f[1]:=f[i]; writeln(f[1]); end.
- 1
Information
- ID
- 16308
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By