1 条题解

  • 0
    @ 2025-4-7 21:38:01

    C :

    #include<stdio.h>
    
    int max(int a,int b){
    	return a>b?a:b;
    }
    
    struct Goods{//物品结构体
    	int w;//物品体积
    	int v;//物品价值
    }list[101];
    
    int status[1001];//体积为j时能装的最大总价值
    
    int main(){
    	int s,n,i,j;//总容量s,n个物品
    	while(scanf("%d%d",&s,&n)!=EOF&&s!=0&&n!=0){
    		for(i=1;i<=n;i++){//输入每个物品信息
    			scanf("%d%d",&list[i].w,&list[i].v);
    		}
    		for(j=0;j<=s;j++){//初始化
    			status[j]=0;
    		}
    		for(i=1;i<=n;i++){//循环每一个物品
    			for(j=s;j>=list[i].w;j--){//如果能放进去
    				status[j]=max(status[j],status[j-list[i].w]+list[i].v);//放进去之后的总价值=max(不变,此物品价值+剩余的空间能放的最大总价值)
    			}
    		}
    		printf("%d\n",status[s]);
    	}
    	return 0;
    }
    
    

    C++ :

    #include<iostream>   
    #include<cstdio>   
    #include<algorithm>   
    using namespace std;   
    int i,j,T,m,t[1001],c[1001],f[1001];   
    int main()   
    {   
        scanf("%d%d",&T,&m);   
        for(i=1;i<=m;i++)   scanf("%d%d",&t[i],&c[i]);   
        for(i=1;i<=m;i++)   
        {   
            for(j=T;j>=t[i];j--)   
            {   
                f[j]=max(f[j],f[j-t[i]]+c[i]);   
                   
            }   
        }   
        cout<<f[T];   
        return 0;   
    }  
    
    

    Pascal :

    var w,c,f:array[0..1001]of longint; i,j,t,n:longint;
    begin
      read(t,n);
      for i:=1 to n do
    read(w[i],c[i]);fillchar(f,sizeof(f),0);
      for i:=1 to n do
       for j:=t downto w[i] do
         if f[j-w[i]]+c[i]>f[j] then f[j]:=f[j-w[i]]+c[i];
      writeln(f[t]);
    end.
    
    • 1

    信息

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