#10661: 求救 為何會OLE


a5083 (assassin刺客大師)

學校 : 新北市立板橋高級中學
編號 : 28347
來源 : [140.116.138.99]
最後登入時間 :
2017-06-27 17:13:56
a522. 12455 - Bars -- UVa12455 | From: [111.248.97.167] | 發表日期 : 2016-01-27 14:19

題目要求輸入幾次測資就輸出多少個YES或NO不是嗎

這是我的CODE  希望大家可以指點我

 

#include <stdio.h>
#include <stdlib.h>

void backtrack(int*,int*,int,int,int,int,int*);

int main()
{
  int t;
  int n,p;
  int*arr;
  int*use;
  int*ans;
  int find;
  int i,j;
  while(scanf("%d",&t)!=EOF)
  {
    ans=(int*)calloc(t,sizeof(int));
    for(i=0;i<t;i++)
    {
      find=0;
      scanf("%d",&n);
      scanf("%d",&p);
      arr=(int*)malloc(sizeof(int)*p);
      use=(int*)calloc(p,sizeof(int));
      for(j=0;j<p;j++)
      scanf("%d",arr+j);

      backtrack(arr,use,0,p,n,0,&find);
      if(find==1)
        ans[i]=1;
      free(use);
      free(arr);
    }
    for(i=0;i<t;i++)

    {
      if(ans[i]==1)
        printf("YES\n");
      else
        printf("NO\n");
     }
    free(ans);
  }

return 0;
}

void backtrack(int*arr,int*use,int total,int p,int n,int dimen,int*find)
{
  int i;
  if(n==0)
  *find=1;
  else
  {
    for(i=dimen;i<p;i++)
    {
      if(use[i]==0)
      {
        total=total+arr[i];
        if(total==n)
        {
          *find=1;
          break;
        }
        backtrack(arr,use,total,p,n,i+1,find);
        total=total-arr[i];
        use[i]=0;
      }
   }
}
}

 

 

 

 

 

 
#10662: Re:求救 為何會OLE


a5083 (assassin刺客大師)

學校 : 新北市立板橋高級中學
編號 : 28347
來源 : [140.116.138.99]
最後登入時間 :
2017-06-27 17:13:56
a522. 12455 - Bars -- UVa12455 | From: [111.248.97.167] | 發表日期 : 2016-01-27 15:27

題目要求輸入幾次測資就輸出多少個YES或NO不是嗎

這是我的CODE  希望大家可以指點我

 

#include
#include

void backtrack(int*,int*,int,int,int,int,int*);

int main()
{
  int t;
  int n,p;
  int*arr;
  int*use;
  int*ans;
  int find;
  int i,j;
  scanf("%d",&t);
  
    ans=(int*)calloc(t,sizeof(int));
    for(i=0;i<t;i++)
    {
      find=0;
      scanf("%d",&n);
      scanf("%d",&p);
      arr=(int*)malloc(sizeof(int)*p);
      use=(int*)calloc(p,sizeof(int));
      for(j=0;j<p;j++)
      scanf("%d",arr+j);

      backtrack(arr,use,0,p,n,0,&find);
      if(find==1)
        ans[i]=1;
      free(use);
      free(arr);
    }
    for(i=0;i<t;i++)

    {
      if(ans[i]==1)
        printf("YES\n");
      else
        printf("NO\n");
     }
    free(ans);
  

return 0;
}

void backtrack(int*arr,int*use,int total,int p,int n,int dimen,int*find)
{
  int i;
  if(n==0)
  *find=1;
  else
  {
    for(i=dimen;i<p;i++)
    {
      if(use[i]==0)
      {
        total=total+arr[i];
        if(total==n)
        {
          *find=1;
          break;
        }
        backtrack(arr,use,total,p,n,i+1,find);
        total=total-arr[i];
        use[i]=0;
      }
    }
  }
}

 

 

 

 

 


太瞎了吧

把while(scanf("%d",&t)!=EOF)的while去掉就可以ac了

這樣題目算是有問題嗎

 
ZeroJudge Forum