1 条题解

  • 0
    @ 2023-3-13 12:11:53

    C :

    #include <stdio.h>
    #include <stdlib.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(int argc, char *argv[]) {
    	int n,m;
    	while(scanf("%d%d",&n,&m)!=EOF){
    		int w[5500],v[5500];
    		int dp[6500]={0};
    		int size=0;
    		while(n--){
    			int tw,tv,k,c=1;
    			scanf("%d%d%d",&tw,&tv,&k);
    			while(k-c>0){
    				k-=c;
    				w[size]=c*tw;
    				v[size++]=c*tv;
    				c*=2;
    			}
    			w[size]=k*tw;
    			v[size++]=k*tv;
    		}
    		
    		int i,j;
    		for(i=0;i<size;i++){
    			for(j=m;j>=w[i];j--){
    				dp[j]=dp[j]>(dp[j-w[i]]+v[i])?
    				dp[j]:(dp[j-w[i]]+v[i]);
    			}
    		}
    		printf("%d\n",dp[m]); 
    	}
    	return 0;
    }
    

    C++ :

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int N = 505, M = 6005;
    int p[N],v[N],s[N],f[M]={0};
    
    int main(){
    	int n,m;
    	cin>>n>>m;
    	for (int i=1; i<=n; i++) cin>>p[i]>>v[i]>>s[i];
    	for (int i=1; i<=n; i++)
    		for (int j=m; j>=0; j--)
    			for (int k=0; k<=s[i]; k++)
    				if (j-k*p[i]>=0) f[j]=max(f[j],f[j-k*p[i]]+k*v[i]);
    	cout<<f[m]<<endl;
    	return 0;
    }
    

    Pascal :

     var
      v,w,s,f:array[0..6001]of longint;
      i,j,k,n,m:longint;
    
    function max(x,y:longint):longint;
      begin
        if x>y then exit(x);
        exit(y);
    end;
    
    begin
      readln(n,m);
      for i:=1 to n do
        readln(v[i],w[i],s[i]);
      for i:=1 to n do
        for j:=m downto 0 do
          for k:=0 to s[i] do
            begin
              if j-k*v[i]<0 then break;
              f[j]:=max(f[j],f[j-k*v[i]]+w[i]*k);
            end;
      writeln(f[m]);
    end.
    
    
    • 1

    信息

    ID
    2132
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者