应该是对于ppair的处理不当,但不知道怎么改
#include<bits/stdc++.h>
using namespace std;
int main(){
bool a[2005],b[2005];
int n,p1,p3,p5,pp;
cin>>n;
string at,bt;
cin>>at>>bt>>p1>>p3>>p5>>pp;
for (int i=0;i<n;i++){
a[i]=at[i]-'0';
b[i]=bt[i]-'0';
}
int ans[2005][2005]={0};
for (int i=1;i<=n;i++){
int j=0;
ans[i][j]=INT_MAX;
if (a[i-1]==0)
ans[i][j]=ans[i-1][j];
if (i>=5)
ans[i][j]=min(ans[i][j],ans[i-5][j]+p5);
else
ans[i][j]=min(ans[i][j],p5);
if (i>=3)
ans[i][j]=min(ans[i][j],ans[i-3][j]+p3);
else
ans[i][j]=min(ans[i][j],p3);
if (i>=4)
ans[i][j]=min(ans[i][j],ans[i-4][j]+pp);
else
ans[i][j]=min(ans[i][j],pp);
ans[i][j]=min(ans[i][j],ans[i-1][j]+p1);
}
for (int j=1;j<=n;j++){
int i=0;
ans[i][j]=INT_MAX;
if (b[j-1]==0)
ans[i][j]=ans[i][j-1];
if (j>=5)
ans[i][j]=min(ans[i][j],ans[i][j-5]+p5);
else
ans[i][j]=min(ans[i][j],p5);
if (j>=3)
ans[i][j]=min(ans[i][j],ans[i][j-3]+p3);
else
ans[i][j]=min(ans[i][j],p3);
if (j>=4)
ans[i][j]=min(ans[i][j],ans[i][j-4]+pp);
else
ans[i][j]=min(ans[i][j],pp);
ans[i][j]=min(ans[i][j],ans[i][j-1]+p1);
}
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
ans[i][j]=INT_MAX;
if (a[i-1]==0&&b[j-1]==0)
ans[i][j]=ans[i-1][j-1];
else if (a[i-1]==0)
ans[i][j]=ans[i-1][j];
else if (b[j-1]==0)
ans[i][j]=ans[i][j-1];
if (i>=5)
ans[i][j]=min(ans[i][j],ans[i-5][j]+p5);
else
ans[i][j]=min(ans[i][j],ans[0][j]+p5);
if (i>=3)
ans[i][j]=min(ans[i][j],ans[i-3][j]+p3);
else
ans[i][j]=min(ans[i][j],ans[0][j]+p3);
if (j>=5)
ans[i][j]=min(ans[i][j],ans[i][j-5]+p5);
else
ans[i][j]=min(ans[i][j],ans[i][0]+p5);
if (j>=3)
ans[i][j]=min(ans[i][j],ans[i][j-3]+p3);
else
ans[i][j]=min(ans[i][j],ans[i][0]+p3);
if (i>=4&&j>=4)
ans[i][j]=min(ans[i][j],ans[i-4][j-4]+pp);
else if (i<4&&j<4)
ans[i][j]=min(ans[i][j],pp);
else if (i<4)
ans[i][j]=min(ans[i][j],ans[0][j-4]+pp);
else
ans[i][j]=min(ans[i][j],ans[i-4][0]+pp);
ans[i][j]=min(ans[i][j],min(ans[i-1][j],ans[i][j-1])+p1);
}
}
cout<<ans[n][n];
return 0;
}