#include <bits/stdc++.h>
using namespace std;
#define int long long
int dp[1005][3][1005];
int hpcost[1005],extra[1005];
int sx[1005];
int by(int x,int y)
{
if((x == 1 && y == 0) || (x == 2 && y == 1) || (x == 0 && y == 2)) return 2;
if(x == y) return 1;
return 0;
}
int nxt(int x)
{
if(x == 1) return 2;
if(x == 2) return 0;
return 1;
}
signed main()
{
int a;
cin >> a;
int b = a - 1;
for(int i = 1;i <= a;i++) cin >> extra[i];
for(int i = 1;i <= b;i++) cin >> hpcost[i];
for(int i = 1;i <= a;i++)
{
cin >> sx[i];
cout << "he ";
}
memset(dp,128,sizeof(dp));
for(int i = 0;i <= 2;i++)
{
dp[1][i][0] = by(i,sx[1]);
}
for(int i = 1;i <= a;i++)
{
for(int j = 0;i <= 2;j++)
{
for(int k = 0;k < i;k++)
{
dp[i][j][k] = dp[i - 1][j][k] + by(j,sx[i]) * extra[i];
if(k > 0)
{
for(int l = 0;l <= 2;l++)
{
if(l != j) dp[i][j][k] = max(dp[i][j][k],dp[i - 1][l][k - 1] + by(l,sx[i]) * extra[i] - hpcost[k]);
}
}
}
}
}
int ans = -2147483648;
for(int i = 0;i <= 2;i++)
{
for(int j = 0;j < a;j++) ans = max(ans,dp[a][i][j]);
}
cout << ans;
return 0;
}
程序总是在读入最后一个数的时候运行错误,求指点!