1 条题解

  • 0
    @ 2025-2-14 21:20:40

    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
    上传者