poj3280Cheapest Palindrome(记忆化)
生活随笔
收集整理的這篇文章主要介紹了
poj3280Cheapest Palindrome(记忆化)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
鏈接
真的1A了。。
一開始想復(fù)雜了 想著補全再刪 沒想好 后來想到遞歸 大的回文串是由小的推過來的?
一直遞歸下去 對于當(dāng)前的i,j可以選擇保留或者刪除 選個最小的
1 #include <iostream> 2 #include<cstring> 3 #include<algorithm> 4 #include<stdlib.h> 5 #include<cstdio> 6 using namespace std; 7 #define N 2010 8 #define INF 0xfffffff 9 int v[500][2]; 10 int dp[N][N]; 11 char s[N]; 12 int dfs(int i,int j) 13 { 14 if(i>j) return 0; 15 if(i==j) 16 return dp[i][j]=0; 17 if(dp[i][j]!=-1) 18 return dp[i][j]; 19 if(s[i]==s[j]) 20 dp[i][j] = dfs(i+1,j-1); 21 else 22 dp[i][j] = min(dfs(i,j-1)+min(v[s[j]][0],v[s[j]][1]),dfs(i+1,j)+min(v[s[i]][0],v[s[i]][1])); 23 return dp[i][j]; 24 } 25 int main() 26 { 27 int i,n,m,a,b; 28 char c; 29 while(scanf("%d%d",&n,&m)!=EOF) 30 { 31 memset(dp,-1,sizeof(dp)); 32 cin>>s; 33 for(i = 1; i <= n; i++) 34 { 35 cin>>c>>a>>b; 36 v[c][0] = a; 37 v[c][1] = b; 38 } 39 int ans = dfs(0,m); 40 cout<<ans<<endl; 41 } 42 return 0; 43 }View Code
?
轉(zhuǎn)載于:https://www.cnblogs.com/shangyu/p/3280750.html
總結(jié)
以上是生活随笔為你收集整理的poj3280Cheapest Palindrome(记忆化)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黄山风景区看日出住哪个酒店好
- 下一篇: java听课笔记(四)