| ||||||||||
| 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