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

哪位高人帮我看一下,为什么我的是WRONG呢

Posted by 591164048 at 2009-09-30 21:53:57 on Problem 1699

#include <iostream>
#include <string> 
using namespace std;

int n;
string str[20];
int a[20];
int num[20][20];
int max_num=200;
        
void input()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>str[i];
			  a[i]=i;
    }    
}

int match(string str1,string str2)
{
 		 int num=0;
		 bool flag=true;
		 int j;
     for(int i=0;i<str1.size()&&flag;i++)
     {      
         if(str1[i]==str2[0])
         {
             for(j=i;j<str1.size()&&j-i<str2.size();j++)
             {
                 if(str1[j]!=str2[j-i])
                 {
								     num=0;
                     break;
                 }
                 num++;
			 }
			 if(j==str1.size())
			 {
				 flag=false;
			 }
         }
	 }   
	 //cout<<num<<"    ";
     return num;
 }    
     
                
    
void fun()
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            num[i][j]=match(str[i],str[j]);
			//cout<<num[i][j];
		}
		//cout<<endl;
    }
}

//交换 
void Swap(int &a,int &b)
{
    int  c;
    c=a;
    a=b;
    b=c;
}  
  
//全排列 
void Perm(int k,int m)
{
    if(k==m)
    {
        int t=str[a[0]].size();//中间变量 
         int mid=0;
        for(int i=1;i<=m;i++)
        {
			if(num[a[mid]][a[i]]!=str[a[i]].size())
			{
						mid = i-1;
			}
			
			t=t+str[a[i]].size()-num[a[mid]][a[i]]; 
			if(t>=max_num)
			{
			 					break;
			}          
        }
        max_num=(t<max_num)?t:max_num;  
    }
    else
    {
        for(int i=k;i<=m;i++)
        {
            Swap(a[k],a[i]);
            Perm(k+1,m);
            Swap(a[k],a[i]);
        }
    }        
}             
void run()
{
	fun();
    Perm(0,n-1);
}

void output()
{
 		 cout<<max_num<<endl;
}
               
int main()
{
	int c;
	cin>>c;
	while(c--!=0)
	{
		max_num=200;
		input();
		run();
		output();
	}
    system("pause");
	return 0;
}


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