1 条题解
-
0
C :
#include <stdio.h> #include <string.h> #define maxc 100 #define maxv 1000 int dp[maxv]={0}; int v[maxc]={0}; int p[maxc]={0}; int c[maxc]={0}; int max(int x,int y){ return x>y?x:y; } int main() { int i,j,k,n,m,nn,e; scanf("%d",&nn); for(e=0;e<nn;e++){ scanf("%d%d",&m,&n); memset(dp,0,sizeof(dp)); for(i=0;i<n;i++){ scanf("%d%d%d",&v[i],&p[i],&c[i]); } for(i=0;i<n;i++){ for(j=m;j>=0;j--){ for(k=0;k<=c[i];k++){ if(j-k*v[i]>=0){ dp[j]=max(dp[j],dp[j-k*v[i]]+p[i]*k); } } } } printf("%d\n",dp[m]); } return 0; }
C++ :
#include <stdio.h> int run() { int i,j,a[111],b[111],c[111],n,m,d[111][111],k; scanf("%d%d",&n,&m); for(i=1;i<=m;i++) scanf("%d%d%d",&a[i],&b[i],&c[i]); for(i=0;i<=m;i++) for(j=0;j<=n;j++) d[i][j]=0; for(i=0;i<m;i++) for(j=0;j<=n;j++) for(k=0;k<=c[i+1];k++) if((j+k*a[i+1]<=n)&&(d[i+1][j+k*a[i+1]]<d[i][j]+k*b[i+1])) d[i+1][j+k*a[i+1]]=d[i][j]+k*b[i+1]; j=0; for(i=0;i<=n;i++) if(d[m][i]>j) j=d[m][i]; printf("%d\n",j); } int main() { int t; scanf("%d",&t); while(t!=0) { t--; run(); } return 0; }
Pascal :
var f,w,c,s:array[0..101]of longint; m,n,cc,ccc,i,j,k:longint; begin read(cc); for ccc:=1 to cc do begin read(m,n); for i:=1 to n do read(w[i],c[i],s[i]); fillchar(f,sizeof(f),0); for i:=1 to n do for j:=m downto 0 do for k:=1 to s[i] do begin if j-k*w[i]<0 then break; if f[j-k*w[i]]+c[i]*k>f[j] then f[j]:=f[j-k*w[i]]+c[i]*k; end; writeln(f[m]); end; end.
Java :
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner in = new Scanner(System.in); int t = in.nextInt(); while (t-- > 0) { int m = in.nextInt(); int n = in.nextInt(); int[] w = new int[n + 1]; int[] c = new int[n + 1]; int[] v = new int[n + 1]; int[] f = new int[2000]; int[] weight = new int[2000]; int[] value = new int[2000]; int count = 0; for (int i = 0; i < n; i++) { v[i] = in.nextInt(); w[i] = in.nextInt(); c[i] = in.nextInt(); for (int j = 1; j <= c[i]; j <<= 1) { value[count] = j * v[i]; weight[count++] = j * w[i]; c[i] -= j; } if (c[i] > 0) { value[count] = c[i] * v[i]; weight[count++] = c[i] * w[i]; } } for (int i = 0; i < count; i++) { for (int j = m; j >= value[i]; j--) { f[j] = Math.max(f[j], f[j - value[i]] + weight[i]); } } System.out.println(f[m]); } } }
- 1
信息
- ID
- 747
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者