Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

第一次写状态DP的程序就超时了,哪位帮我看看,先谢过了!

Posted by zerocool_08 at 2005-10-19 15:35:47 on Problem 2441
#include "stdio.h"
#include "stdlib.h"
int  a[21][1<<20]={0},b[30][30]={0},n,m;
int  fd(int bull,int ban)  
{
     if(a[bull][ban])
       return a[bull][ban];
     if(bull==1)    
	 {        
			 int  sum=0,i=1,j=ban;
			 while(j)
			 {
				 if((j&1)&&b[bull][i]==1)
					 sum++;
				 j=(j>>1),i++;
			 }
			 a[bull][ban]=sum;
			 return sum;
     }
     else
     {
         int  i;
         for(i=1;i<=m;i++)
         {
             if(b[bull][i]==1)  
             {
					 if((ban>>(i-1))&1)
					 {
							 int  k=0,s=ban-(1<<(i-1));
							 while(s)
							 {
								 if(s&1)
									  k++;
								 s=(s>>1);
							 }
							 if(k>=bull-1)  
							   a[bull][ban]+=fd(bull-1,ban-(1<<(i-1)));

					 }
             }
        }
        return  a[bull][ban];
    }
}                                     
int main()
{
    int i,j,k,l;
    scanf("%d %d",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&k);
        for(j=1;j<=k;j++)
        {
            scanf("%d",&l);
            b[i][l]=1;
        }      
    }
    printf("%d\n",fd(n,(1<<m)-1));
    return 1;
}              

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator