http://acm.hdu.edu.cn/showproblem.php?pid=4632
簡單DP
代碼:
#include<iostream> #include<cstdio> #include<algorithm> #include<string> #include<cstring> #include<cmath> #include<set> #include<vector> #include<list> using namespace std; typedef long long ll; typedef pair<double,double>ppd; const double PI = acos(-1.); const double eps = (1e-9); const int MOD=10007; const int N=1005; char s[N]; int ans[N][N]; int dp(int l,int r) { if(ans[l][r]!=-1) return ans[l][r];//記憶化 ans[l][r]=0; if(l==r)//邊界 return (ans[l][r]=1); if(l+1==r)//邊界 { ans[l][r]=2; if(s[l]==s[r]) ++ans[l][r]; return ans[l][r]; } if(s[l]==s[r])//以l和r 為左右端點的情況 其中的1表示的是單獨的l和r也是一個回文 ans[l][r]+=dp(l+1,r-1)+1; ans[l][r]+=(dp(l+1,r)+dp(l,r-1)-dp(l+1,r-1));//把多加的減掉 ans[l][r]%=MOD; if(ans[l][r]<0) ans[l][r]+=MOD; return ans[l][r]; } int main() { //freopen("data.in","r",stdin); int T; scanf("%d",&T); for(int c=1;c<=T;++c) { scanf("%s",s); memset(ans,-1,sizeof(ans)); printf("Case %d: %d\n",c,dp(0,strlen(s)-1)); } return 0; }
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
