poj 3280 Cheapest Palindrome dp(…
2013-04-14 19:39
274 查看
dp[t][s]表示t到s改变成回文串的最小代价
可以由dp[t+1][s],dp[t][s-1],dp[t+1][s-1]得来
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int maxn=2000+100,inf=99999999;
char a[maxn];
int turn[301][3],dp[maxn][maxn];
int text[maxn][maxn];
int min(int a,int b)
{
if(a<b)
return(a);
return(b);
}
int dfs(int t,int s)
{
if(text[t][s])
return(0);
text[t][s]=1;
if(t>s)
{
dp[t][s]=0;
return(0);
}
if(t==s)
{
dp[t][s]=0;
return(0);
}
dfs(t+1,s);
dfs(t,s-1);
int
sum1=min(turn[a[t]][1],turn[a[t]][2]);
int
sum2=min(turn[a[s]][1],turn[a[s]][2]);
dp[t][s]=min(dp[t+1][s]+sum1,dp[t][s-1]+sum2);
if(a[t]==a[s])
{
dfs(t+1,s-1);
dp[t][s]=min(dp[t][s],dp[t+1][s-1]);
}
}
int main()
{
int n,m;
scanf("%d
%d",&n,&m);
{
scanf("%s",&a[1]);
for(int i=1;i<=n;i++)
{
char
tmp[10];
scanf("%s",tmp);
scanf("%d
%d",&turn[tmp[0]][1],&turn[tmp[0]][2]);
}
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
dp[i][j]=inf;
memset(text,0,sizeof(text));
dfs(1,m);
int ans=dp[1][m];
printf("%d\n",ans);
}
return 0;
}
可以由dp[t+1][s],dp[t][s-1],dp[t+1][s-1]得来
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int maxn=2000+100,inf=99999999;
char a[maxn];
int turn[301][3],dp[maxn][maxn];
int text[maxn][maxn];
int min(int a,int b)
{
if(a<b)
return(a);
return(b);
}
int dfs(int t,int s)
{
if(text[t][s])
return(0);
text[t][s]=1;
if(t>s)
{
dp[t][s]=0;
return(0);
}
if(t==s)
{
dp[t][s]=0;
return(0);
}
dfs(t+1,s);
dfs(t,s-1);
int
sum1=min(turn[a[t]][1],turn[a[t]][2]);
int
sum2=min(turn[a[s]][1],turn[a[s]][2]);
dp[t][s]=min(dp[t+1][s]+sum1,dp[t][s-1]+sum2);
if(a[t]==a[s])
{
dfs(t+1,s-1);
dp[t][s]=min(dp[t][s],dp[t+1][s-1]);
}
}
int main()
{
int n,m;
scanf("%d
%d",&n,&m);
{
scanf("%s",&a[1]);
for(int i=1;i<=n;i++)
{
char
tmp[10];
scanf("%s",tmp);
scanf("%d
%d",&turn[tmp[0]][1],&turn[tmp[0]][2]);
}
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
dp[i][j]=inf;
memset(text,0,sizeof(text));
dfs(1,m);
int ans=dp[1][m];
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- poj&nbsp;1159&nbsp;Palindrome(DP&nbsp;空间压缩…
- poj&nbsp;1159&nbsp;Palindrome(DP)
- POj 1159 Palindrome (dp)
- poj&nbsp;1155&nbsp;TELE&nbsp;树形dp
- poj&nbsp;3181&nbsp;Dollar&nbsp;Dayz&nbsp;dp(动态规划…
- poj&nbsp;1952&nbsp;BUY&nbsp;LOW,&nbsp;BUY&nbsp;LOWER&nbsp;dp
- poj&nbsp;2663&nbsp;Tri&nbsp;Tiling(DP)
- [POJ 3280]Cheapest Palindrome[DP]
- poj 2181_dp
- Cheapest Palindrome (poj 3280 区间DP)
- poj&nbsp;2948&nbsp;Martian&nbsp;Mining&nbsp;dp
- ACM: DP训练好题 动态规划题 poj 1…
- poj&nbsp;3267&nbsp;The&nbsp;Cow&nbsp;Lexicon(DP)
- poj&nbsp;2250&nbsp;Compromise(DP)
- Cheapest Palindrome poj 3280 (区间dp)
- poj&nbsp;3034&nbsp;Whac-a-Mole&nbsp;dp
- ACM: 动态规划题 poj 2057 树状DP
- poj&nbsp;1609&nbsp;Tiling&nbsp;Up&nbsp;Blocks(DP)
- poj&nbsp;1080&nbsp;Human&nbsp;Gene&nbsp;Functions&nbsp;dp
- Cheapest Palindrome POJ - 3280 (区间DP)