程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1518 square

hdu 1518 square

編輯:C++入門知識

很是經典的深搜dfs,之前這題用了很長時間根本就沒有思路,不知道如何下手,上網搜了一下別人的代碼,感覺寫的很好,而且思路很清晰,就自己寫了;www.2cto.com
[cpp] 
#include<cstdio> 
#include<algorithm> 
#include<cmath> 
using namespace std; 
int num[25]; 
int sum=0,len; 
int n; 
bool ok; 
bool vis[25]; 
 void dfs(int s,int k,int cnt) 
{  int i; 
      if(s==len) 
      { 
         cnt++; 
         if(cnt==4) 
         {ok=1;return;} 
         s=0;k=0; 
      } 
      if(ok)return; 
      for(i=k;i<n;i++) 
      { 
       if(vis[i]==false) 
       { 
          if(s+num[i]>len) 
              continue; 
          vis[i]=true; 
          dfs(s+num[i],i,cnt); 
          vis[i]=false; 
       } 
      } 

int main() 

    int t; 
    scanf("%d",&t); 
    while(t--) 
    { 
       
        ok=0; 
            sum=0; 
            
       scanf("%d",&n); 
       int max=-10; 
     for(int i=0;i<n;i++) 
     { 
      scanf("%d",&num[i]); 
      if(max<num[i]) 
          max=num[i]; 
      sum+=num[i]; 
      vis[i]=false; 
     } 
       
     if(n<4) 
     { printf("no\n");continue;} 
     if(sum%4||sum/4<max) 
     { 
      printf("no\n");continue; 
     }else 
     { 
      len=sum/4; 
     dfs(0,0,0); 
      if(ok) 
          printf("yes\n"); 
      else 
          printf("no\n"); 
     } 
    } 
 return 0; 

///* 
//10 
//6 3 4 4 3 1 1 
//20 1 1 1 1 1 1 1 1  1 1 1 1 1 1 1 1 1 1 1 1 
//*/ 
  作者:Java_beginer1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved