zoj1711

来源:互联网 发布:linux查看oracle日志 编辑:程序博客网 时间:2024/05/16 09:52

题目大意:

给一个总和t以及n个整数,找到n个整数中加起来等于t的序列

解题思路:

深度优先搜索问题

代码如下:

#include<stdio.h>#include<string.h>int data[15];int ans[15];int visit[15];int flag;int n,t;void dfs(int sum,int count,int pos){  int i;  if(!sum)  {    flag=1;    printf("%d",ans[0]);    for(i=1;i<count;i++)      printf("+%d",ans[i]);    printf("\n");    return;  }  for(i=pos;i<n;i++)  {    if(!visit[i]&&data[i]<=sum    &&(data[i]!=data[i-1]||i==pos))    {      visit[i]=1;      ans[count]=data[i];      dfs(sum-data[i],count+1,i+1);      visit[i]=0;    }  }}int main(){  int i;  while(scanf("%d%d",&t,&n)&&(t+n))  {    memset(visit,0,sizeof(visit));    for(i=0;i<n;i++)    {      scanf("%d",&data[i]);      if(data[i]>t)  visit[i]=1;    }    printf("Sums of %d:\n",t);    flag=0;    dfs(t,0,0);    if(!flag)  printf("NONE\n");  }  return 0;}
0 0
原创粉丝点击