dp蒟蒻求助区间dp
查看原帖
dp蒟蒻求助区间dp
152980
Euclid楼主2021/7/26 16:52
#include<bits/stdc++.h>
using namespace std;
const int maxn=4005;
const int inf=0x3f3f3f3f;
int n,m;
char s[maxn];
int dp[maxn][maxn],a[205][2];
int main()
{
	scanf("%d%d",&n,&m);
	scanf("%s",s+1);
	char st;
	int x,y;
	for(int i=1;i<=n;i++)
	{
		cin>>st;
		scanf("%d%d",&x,&y);
		a[(int)(st)][0]=y;
		a[(int)(st)][1]=x;
	}
//	memset(dp,0x3f3f3f,sizeof(dp));
///	for(int i=1;i<=m;i++)dp[i][i]=0;
	for(int len=2;len<=m;len++)
		for(int i=1;i+len-1<=m;len++)
		{
			int j=i+len-1;
			if(s[i]==s[j])
			{
				if(i+1==j)dp[i][j]=0;
				else dp[i][j]=dp[i+1][j-1];
			}
			else
			{
				dp[i][j]=min(min(min(dp[i][j-1]+a[(int)(s[j])][0],dp[i][j-1]+a[(int)(s[j])][1]),dp[i+1][j]+a[(int)(s[i])][0]),dp[i+1][j]+a[(int)(s[i])][1]);
			}
		}
	printf("%d",dp[1][m]);
	return 0;
}
2021/7/26 16:52
加载中...