1 条题解

  • 0
    @ 2025-2-14 21:01:01

    C++ :

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    int s,n;
    int w[100];
    bool bag(int,int);
    int main()
    {
    	//freopen("snap5.in","r",stdin);
    	//freopen("snap5.out","w",stdout);
    	cin>>n>>s;
    	for(int i=1;i<=n;i++) cin>>w[i];
    	if(!bag(n,s)) cout<<"NO ANSWER"<<endl;
    	return 0;
    }
    bool bag(int r,int v)
    {
    	if(v<0) return 0;//小于0说明加入物品后超出了 
    	if(v==0) return true;//说明正好 
    	for(int i=r;i>=1;i--)//逐一枚举r个物品 
    	{
    		if(bag(i-1,v-w[i]))//如果把第i个物品放进去刚好能够放满则输出 
    		{
    			cout<<"number:"<<i<<' '<<"weight:"<<w[i]<<endl;
    			return 1;
    		}
    	}
    	return 0;
    }
    

    Pascal :

    var
      w:array[1..10000] of longint;
      we,i,n:longint;
      k:array[1..10000] of boolean;
    procedure doit(we:longint);
      var
        i,j:longint;
      begin
        if we<0 then exit;
        if we=0 then
        begin
          for i:=1 to n do
          if not(k[i]) then
            writeln('number:',i,' weight:',w[i]);
          halt;
        end;
        for i:=n downto 1   do
          if k[i] then
          begin
            k[i]:=false;
            doit(we-w[i]);
            k[i]:=true;
          end;
      end;
    begin
      fillchar(k,sizeof(k),true);
      readln(n,we);
      for i:=1 to n do read(w[i]);
      doit(we);
      writeln('NO ANSWER');
    end.
    
    • 1

    信息

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