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

trie+从后往前的dp 少部分测试数据WA 哪位大牛帮忙看下哪里出了问题 附数据

Posted by catcher_wang at 2009-08-19 09:38:34 on Problem 3267 and last updated at 2009-08-19 10:22:40
#include<iostream>
using namespace std;
struct Node{
	int id;
	Node *branch[26];
	Node(){
		id=-1;
		for(int i=0;i<26;i++)
			branch[i]=NULL;
	}
};
Node root;
//char dic[605][30];
char message[305];
int w,l,end;
int f[305];
void insert(char str[30],int id){
	Node *temp=&root;
	int index;
	for(int i=0,len=strlen(str);i<len;i++){
		index=str[i]-'a';
		if(temp->branch[index]==NULL)
			temp->branch[index]=new Node();
		temp=temp->branch[index];
	}
	temp->id=id;
}
int dp(int start){
	Node *temp=&root;
	int min=end-start+1,minTemp,d=0;
	int index=message[start]-'a';
	if(temp->branch[index]==NULL)//以message[start]打头的词根本不存在
		return 1+f[start+1];
	for(int i=start;i<=end;i++){
		index=message[i]-'a';		
		//遇到不存在的,则跳过,d++
		if(temp->branch[index]==NULL){
			d++;			
		}else{
			temp=temp->branch[index];
			//trie中对应id不为-1,即找到一个单词			
			if(temp->id!=-1){
				minTemp=d+f[i+1];
				if(minTemp<min) 
					min=minTemp;				
			}
			//trie中对应不为NULL但为-1
		}
		minTemp=i-start+1+f[i+1];//每一步都要判断!!!必须的!!!!
		if(minTemp<min)
			min=minTemp;
	}
	return min;
}
int main(){
	int i;
	char str[30];
	scanf("%d%d",&w,&l);
	scanf("%s",&message);
	for(i=1;i<=w;i++){
		//scanf("%s",dic[i]);
		//insert(dic[i],i);
		scanf("%s",&str);
		insert(str,i);
	}
	end=strlen(message)-1;
	for(i=end;i>=0;i--)
		f[i]=dp(i);
	printf("%d\n",f[0]);
	system("pause");
	return 0;
}
/*
下面是WA的一组数据:
40 50
owoooccccwococoowcoowowwccowwoocoowcowocwccwoowwwc
cwowocwwoo
occccwococ
cowcwcowwwoow
wocowwowww
oowwcccocwowc
cwoooowoowowww
cwwooccc
coocwcowowowc
wcwowwowo
owwowwoc
oooowwcwoow
wwcoocccwwo
owowoooo
wocccwwooow
ccwwwoocwwc
wwwcwwwccwww
wwowwococ
ccwwcwcc
cowwccwwccow
cwocowoccc
wowwwwwcw
ocwowwcwo
oowowoowwcc
ooccoccwww
coowwcccwooo
ooccwoooccc
oocwccwowco
cwccwcooc
wwocwoooocwwo
cwocowwccocwcwc
wwooccwowwo
cccccowcwc
ocwccwcwco
coccowocc
owwwcooowowwc
wwwocwowcoc
cowoccoooco
wwwowcoccwc
cwcowowooc
cwooowwwc
20
*/

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