http://acm.hdu.edu.cn/showproblem.php?pid=4632
簡(jiǎn)單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 為左右端點(diǎn)的情況 其中的1表示的是單獨(dú)的l和r也是一個(gè)回文 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號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
