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

Re:Why TLE ? Give me a reason !!!!! I just test n^2 times ! You can tell me?

Posted by units at 2007-04-28 12:15:35 on Problem 3211
In Reply To:Why TLE ? Give me a reason !!!!! I just test n^2 times ! You can tell me? Posted by:jesse_luzexi at 2007-04-19 18:38:17
> #include "iostream"
> 
> using namespace std;
> 
> char color[11][11];
> int colothes[11][101];
> int num_colothes[11];
> char temp[11];
> int dp[101][100001];
> 
> int minimum (const void *a,const void *b)
> {
>     return *(int *)a-*(int *)b;
> }
> 
> 
> int main ()
> {
>     int i,j,k;
>     int n,m;
>     int num;
>     int sum,total,max;
>     int temp1;
>     //freopen("in1.txt","r",stdin);
>     for(;scanf("%d%d",&n,&m)!=EOF;)
>     {
>         if(n==0 && m==0 ) return 1;
> 
>         for(i=0;i<n;i++)
>             scanf("%s",color[i]);
> 
>         memset(num_colothes,0,sizeof(num_colothes));
> 
>         for(i=0;i<m;i++)
>         {
>             scanf("%d %s",&num,temp);
>             for(j=0;j<n;j++)
>                 if(strcmp(temp,color[j])==0)
>                     break;
>                 colothes[j][ num_colothes[j]++ ] = num;
>         }
>         /*
>         for(i=0;i<n;i++)
>         {
>             qsort( colothes[i] , num_colothes[i] , sizeof(int) , minimum);
>         }*/
> 
>         total=0;
>         
>         for(i = 0; i < n ;i++)
>         {
>             if(num_colothes[i]==0) continue;
> 
>             sum=0;
> 
>             for(j=0 ; j< num_colothes[i] ;j++)
>                 sum+=colothes[i][j];
> 
>             memset(dp,0,sizeof(dp));
>             
>             for(j=0;j<=num_colothes[i];j++)
>                 dp[j][0]=1;
> 
>             max=0;
>             temp1=0;
>             
>             for(j=1;j<=num_colothes[i];j++)
>             {                
>                 for( k = colothes[i][j-1] ; k<=sum/2 /*&& k<= temp1*/ ;k++ )
>                 {
>                     /*
>                     if(dp[ j-1 ][ k ]!=1 ) continue; 
>                     dp[ j ][ k + colothes[ i ][ j-1 ] ] = 1 ;
> 
>                     if(k + colothes[ i ][ j-1 ] >max)
>                             max=k + colothes[ i ][ j-1 ];*/
>                     if(dp[j-1][ k-colothes[i][j-1] ]==1)
>                     {
>                         if(k>max)
>                             max=k;
>                         dp[ j ][ k ] = 1 ;
>                     }
>                 }
>                 //temp1 += colothes[i][j-1] ;
>             }
>             total+=sum-max;
>             
>         }
>         printf("%d\n",total);
>     }
>     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