1 条题解

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

    C :

    #include "stdio.h"
    int m,n,k;
    int a[1000],b[1000],c[1000],w[30][80];
    int main()
    {
    	int i,j,l,t1,t2;;
    	scanf("%d%d%d",&m,&n,&k);
    	memset(w,127,sizeof(w));
    	w[0][0]=0;
    	for(i=0;i<k;i++)
    		scanf("%d%d%d",&a[i],&b[i],&c[i]);
    	for(i=0;i<k;i++)
    	{
    		for(j=m;j>=0;j--)
    			for(l=n;l>=0;l--)
    			{
    				t1=j+a[i];
    				t2=l+b[i];
    				if(t1>m)t1=m;
    				if(t2>n)t2=n;
    				if(w[t1][t2]>w[j][l]+c[i])
    					w[t1][t2]=w[j][l]+c[i];
    			}
    	}
    	printf("%d\n",w[m][n]);
    	return 0;
    }
    

    C++ :

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int m,n,k;
    int f[30][80],a[1001],b[1001],c[1001];
    int main()
    {
    	//此题跟一般的背包问题不一样,一般问题是要限制容量,
    	//而此题是需要至少满足多少容量,这样f数组要赋值为一个大数 
    	cin>>m>>n;
    	cin>>k;
    	memset(f,0x7f,sizeof(f));
    	f[0][0]=0;//什么都不放 
    	for(int i=1;i<=k;i++) cin>>a[i]>>b[i]>>c[i];
    	for(int i=1;i<=k;i++)
    		for(int j=m;j>=0;j--)
    			for(int k=n;k>=0;k--)
    			{
    				int y,d;
    				y=j+a[i];d=k+b[i];//如果体积超过需要,当作最低需求处理 
    				if(y>m) y=m;
    				if(d>n) d=n;
    				if(f[y][d]>f[j][k]+c[i]) f[y][d]=f[j][k]+c[i];
    			}
    	cout<<f[m][n]<<endl;
    	return 0;
    }
    

    Pascal :

    program DimensionPack;//二维背包
    const
    maxv=1000;
    maxn=1000;
    var
    f:array[0..maxv,0..maxv]of longint;
    a,b,w:array[1..maxn]of longint;
    n,v,u:longint;
    procedure main;
    var
    i,j,k,max:longint;
    begin
      readln(v,u,n);
      for i:=1 to n do readln(a[i],b[i],w[i]);
      for i:=0 to 100 do
       for j:=0 to 100 do  f[i,j]:=10000000;
       f[0,0]:=0;
      for i:=1 to n do
         begin
          for j:=100 downto 0 do
           for k:=100 downto 0 do
             if f[j,k]+w[i]<f[j+a[i],k+b[i]] then f[j+a[i],k+b[i]]:=f[j,k]+w[i];//状态转移方程
         end;
      max:=maxlongint;
      for i:=v to 100 do
       for j:=u to 100 do
        if f[i,j]<max then max:=f[i,j];
      writeln(max);
    end;
    begin
      main;
    end.
    
    
    • 1

    信息

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