1 条题解
-
0
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
- 上传者