| ||||||||||
| 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 | |||||||||
why is it wrong?#include <iostream>
#include <string>
using namespace std;
const int MAXN = 110;
const int INF = 9999999;
char num[27] = "22233344115566070778889990";
string ans[MAXN][MAXN];
int len, dp[MAXN][MAXN];
char mes[MAXN];
void DP()
{
for(int i = 1; i<= len; i++) {
for(int j = 0; j <= len - i; j++) {
int k = j + i - 1;
for(int l = j; l < k; l++) {
if(dp[j][k] > dp[j][l] + dp[l + 1][k]) {
dp[j][k] = dp[j][l] + dp[l + 1][k];
ans[j][k] = ans[j][l] + " " + ans[l + 1][k];
}
}
}
}
if(dp[0][len - 1] == INF)
cout << "No solution" << endl;
else
cout << ans[0][len - 1] << endl;
}
int main()
{
cin >> mes;
len = strlen(mes);
memset(dp, 0, sizeof(dp));
for(int i = 0; i < len; i++)
for(int j = i; j < len; j++)
dp[i][j] = INF;
int n;
cin >> n;
char str1[MAXN], str2[MAXN], str3[MAXN];
for(int i = 0; i < n; i++) {
cin >> str1;
strcpy(str2, str1);
int len1 = strlen(str2);
for(int j = 0; j < len1; j++)
str2[j] = num[str2[j] - 'a'];
str2[len1] = '\0';
if(strstr(mes, str2) != NULL) {
//cout << str1 << endl;
for(int k = 0; k <= len - len1; k++) {
strncpy(str3, mes + k, len1);
str3[len1] = '\0';
if(strcmp(str2, str3) == 0) {
//cout << k << "and" << k + len1 - 1 << endl;
dp[k][k + len1 - 1] = 1;
ans[k][k + len1 - 1] = str1;
}
}
}
}
DP();
return(0);
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator