Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:why DP wa....盯着代码看了4小时了, 还是找不到错误, 大家帮帮忙看看, 行个好心啊(附代码)In Reply To:why DP wa....盯着代码看了4小时了, 还是找不到错误, 大家帮帮忙看看, 行个好心啊(附代码) Posted by:howie at 2006-08-31 21:41:40 > #include <iostream> > #include <string> > using namespace std; > > struct DPDATA > { > int w; > int state[15]; > }; > > int f(string s1, string s2) > { > int i, j, l; > int len = s1.length(); > string tmp; > for (l=len; l>=1; l--) > { > for (i=0; i<len-l+1; i++) > { > tmp = s1.substr(i, l); > if (s2.find(tmp) != string::npos) > return l; > } > } > return 0; > } > > int main() > { > string s[15]; > DPDATA dp[15][15]; > int n; > int i, j, k; > int tmpW, b, t; > int ans; > > while (cin >> n) > { > if (n <= 0) break; > for (i=1; i<=n; i++) > cin >> s[i]; > > for (i=1; i<=n; i++) > { > dp[1][i].w = 0; > for (j=1; j<=n; j++) > dp[1][i].state[j] = 0; > dp[1][i].state[i] = 1; > } > > for (i=2; i<=n; i++) > { > for (j=1; j<=n; j++) > { > tmpW = 0; > b = 0; > for (k=1; k<=n; k++) > { > t = f(s[k], s[j]); > if (dp[i-1][k].state[j] == 0 && tmpW < dp[i-1][k].w + t) > { > tmpW = dp[i-1][k].w + t; > b = k; > } > } > dp[i][j].w = tmpW; > for (k=1; k<=n; k++) > dp[i][j].state[k] = dp[i-1][b].state[k]; > dp[i][j].state[j] = 1; > } > } > /* for (i=1; i<=n; i++) > { > for (j=1; j<=n; j++) > cout << dp[i][j].w << ' '; > cout << endl; > }*/ > ans = dp[n][1].w; > for (i=2; i<=n; i++) > { > if (ans < dp[n][i].w) > ans = dp[n][i].w; > } > cout << ans << endl; > } > > system("pause"); > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator