24h購物| | PChome| 登入
2009-05-17 07:07:49| 人氣399| 回應0 | 上一篇 | 下一篇

97高市資訊學科能力競賽 4. 制服發放

推薦 0 收藏 0 轉貼0 訂閱站台

作法:舉出所有可能(類似DFS)

技巧:一旦有可能就return回去

/**********************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char XXL[4]="XXL",XL[3]="XL",L[2]="L",M[2]="M",S[2]="S",XS[3]="XS";
int way[6]={0},data[31][6],find=0;
int N,MM;
void make(int now)
{
 int a,b;
 if(find==1) return;
 for(a=0;a<6;a++)
    if(data[now][a]==1)
      {
        way[a]++;
        if(now+1<=MM-1)
         make(now+1);/*繼續往下伸*/
        if(now==MM-1)
         {
          for(b=0;b<6;b++)
           if(way[b]>N/6) break;
          if(b==6) find=1;
         }
        way[a]--;
      }  
}
main()
{
 char x[100],y[100]={0};
 while(scanf("%d %d",&N,&MM)==2)
   {
    int a,b;
     for(a=0;a<30;a++)
      for(b=0;b<6;b++)
       data[a][b]=0;
     for(a=0;a<MM;a++)
      {
        scanf("%s %s",x,y);
        if(strcmp(x,XXL)==0||strcmp(y,XXL)==0)
         data[a][0]++;
        if(strcmp(x,XL)==0||strcmp(y,XL)==0)
         data[a][1]++;
        if(strcmp(x,L)==0||strcmp(y,L)==0)
         data[a][2]++;
        if(strcmp(x,M)==0||strcmp(y,M)==0)
         data[a][3]++;
        if(strcmp(x,S)==0||strcmp(y,S)==0)
         data[a][4]++;
        if(strcmp(x,XS)==0||strcmp(y,XS)==0)
         data[a][5]++;
      }
     find=0;
     make(0);
     if(find==1)
      printf("YES\n");
     else
      printf("NO\n");
   }
 return 0;
}

台長: 來源不明
人氣(399) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: 資訊競賽 |
此分類下一篇:97高市資訊學科能力競賽 2. 網路設計
此分類上一篇:2006 NOIP 普及組 NOIP2006 4.數列

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文