您的位置:首页 > 其它

zoj 2744 DP做法

2011-03-22 01:57 295 查看
这个题还是有点纠结...刚开始的时候超内存....后来把int 改为bool 不超内存了..改超时了... 这个看了半天觉的动态规划做法也没什么好优化的了(其实是我不会),,把那个初始化memset 挪到循环外边..每次手动只初始化已经改动了的数组的值..然后不超时了...改WA了..

纠结..后来发现是dp[i][j]写反了..更YM...本来是在自习室了看了三道题回来觉的一会儿就能A完的..这下到现在才两题..纠结..

看了排行..不晓得人家0ms怎么做到的... - -!!

#include <stdio.h>
#include <string.h>
#define MAX 5002
char str[MAX];
bool dp[MAX][MAX];
int main(void)
{
//freopen("in","r",stdin);
//freopen("out","w",stdout);
for(int i=0;i<MAX ;i++)
for(int j=0;j<MAX;j++)
dp[i][j] = false;

while (scanf("%s",str) != EOF )
{
for(int i=0;i<MAX;i++)
dp[i][i] = true;

int len = strlen(str);

for (int i=1;i<len;i++)
for(int j=i;j>=0;j--)
if((dp[j+1][i-1]||i==j+1)&&str[i]==str[j])
dp[j][i]=true;

int count =0;
for(int i=0;i<len;i++)
for(int j=0;j<len;j++)
if(dp[i][j])
{	count++;dp[i][j]=0;}
printf("%d/n",count);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: