讨论 / 仅此纪念我做的第一道DFS~~~
怡红公子 2012-10-19 16:56:00
点我顶贴 收藏 删除
#include<iostream>

using namespace std;

int total,n,k;

void search(int m,int s,int min){

int i;

if(s==k) { if(m>=min) total++;return;}

for(i=min;i<=m-(k-s)*min+1;i++)

search(m-i,s+1,i);

}

int main()

{

int i,j,l;

cin>>n>>k;

total=0;

search(n,1,1);

cout<<total;

system("pause");

}

#1 S.C.Q.@2012-10-19 16:56:00
回复 删除
为什么只有80

procedure dfs(y,z,dqian,zong:longint);

var

dqian1,zong1:longint;

i,j:longint;

begin

if dqian>(n-zong) div z then exit;

if z=2 then

begin

i:=dqian;

j:=n-zong-i;

while i<=j do

begin

inc(sum);

inc(i);

dec(j);

end;

end

else begin

if dqian=0 then dqian1:=1 else dqian1:=dqian;

zong1:=zong+dqian1;

while dqian1<=(n-zong) div z do

begin

dec(y,dqian1);

dec(z);

dfs(y,z,dqian1,zong1);

dec(zong1,dqian1);

inc(y,dqian1);

inc(z);

inc(dqian1);

inc(zong1,dqian1);

end;

end;

end;

procedure work;

begin

dfs(n,m,0,0);

writeln(sum);

end;

测试结果1: 测试结果错误.错误结果为:4

正确结果应为:3

谁有第1个数据值也行

查看更多回复
提交回复