1 条题解

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

    C :

    #include<stdio.h>
    
    struct Goods{
    	int v;//价格
    	int p;//重要度
    }list[25];
    
    int max(int a,int b){
    	return a>b?a:b;
    }
    
    int dp[30000];
    
    int main(){
    	int i,j,N,m;
    	scanf("%d%d",&N,&m);
    	for(i=1;i<=m;i++){
    		scanf("%d%d",&list[i].v,&list[i].p);
    	}
    	for(j=0;j<N;j++){
    		dp[j]=0;
    	}
    	for(i=1;i<=m;i++){
    		for(j=N;j>list[i].v;j--){
    			dp[j]=max(dp[j],dp[j-list[i].v]+list[i].p*list[i].v);
    		}
    	}
    	printf("%d",dp[N]);
    	return 0;
    }
    
    

    C++ :

    #include<iostream>
    #include<string>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int a[20000],b[20000],c[40000];
    int main()
    {
     int i,m,n,j,k;
     cin>>m>>n;
     for (i=1;i<=n;++i)
      cin>>a[i]>>b[i];
     for (i=1;i<=n;++i)
      for (j=m;j>=a[i];--j)
       if (c[j-a[i]]+a[i]*b[i]>c[j]) c[j]=c[j-a[i]]+a[i]*b[i];
     cout<<c[m];
     return 0;
    }
    

    Pascal :

    var i,j,k,n,t:longint;
      v,p:array[0..25] of longint;
      f:array[0..100000] of longint;
    function max(a,b:longint):longint;
      begin
        if a>b then max:=a else max:=b;
      end;
    begin
     // assign(input,'happy.in');
      //r/eset(input);
     // assign(output,'happy.out');
      //rewrite(output);
      readln(k,n);
      for i:=1 to n do  readln(v[i],p[i]);
      fillchar(f,sizeof(f),0);
      for i:=1 to n do
        for j:=k downto v[i] do
        f[j]:=max(f[j],f[j-v[i]]+v[i]*p[i]);
      writeln(f[k]);
      //close(input);close(output);
    end.
    
    
    • 1

    信息

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