1 条题解
-
0
C :
#include "stdio.h" #include "string.h" int n,m; int a[25],b[25],f[30001]; int main() { int i,j; while(scanf("%d%d",&m,&n)!=EOF) { memset(f,0,sizeof(f)); for(i=0;i<n;i++) scanf("%d%d",&a[i],&b[i]); for(i=0;i<n;i++) { for(j=m;j>=a[i];j--) if(f[j-a[i]]+a[i]*b[i]>f[j]) f[j]=f[j-a[i]]+a[i]*b[i]; } printf("%d\n",f[m]); } return 0; }
C++ :
#include<iostream> #include<cstdio> using namespace std; int i[31],w[31],c[30001]; int main() { //freopen("test.in","r",stdin); int m,n; cin>>m>>n; for (int j=1;j<=n;j++) cin>>w[j]>>i[j]; for (int j=1;j<=n;j++) for (int k=m;k>=w[j];k--) if(c[k]<c[k-w[j]]+i[j]*w[j]) c[k]=c[k-w[j]]+i[j]*w[j]; cout<<c[m]; return 0; }
Pascal :
var n, w, u, v, i, j, ans : longint; f : array[0 .. 30010]of longint; begin readln(w, n); for i := 1 to n do begin read(u, v); for j := w-u downto 0 do begin if f[j]+u*v>f[j+u] then f[j+u] := f[j]+u*v; if f[j+u] > ans then ans := f[j+u]; end; end; writeln(ans); end.
- 1
信息
- ID
- 788
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者