dp方程: dp[i][j]=max( dp[i-1][j-1],dp[i-1][j+5]); i=0 和 10 的时候特殊判断一下
#include "stdio.h"
#include "string.h"
#include "math.h"
int dp[10010][101];
int main()
{
int l,n,i,j,min;
int a[101],b[101];
while (scanf("%d%d",&l,&n)!=EOF)
{
for (i=0;i<l;i++)
scanf("%d",&a[i]);
for (i=0;i<l;i++)
scanf("%d",&b[i]);
memset(dp,-1,sizeof(dp));
dp[0][0]=0;
for (i=1;i<=l*n;i++)
{
if (dp[i-1][5]!=-1) dp[i][0]=dp[i-1][5]+b[(i-1)%l];
for (j=1;j<=9;j++)
{
if (dp[i-1][j-1]!=-1) dp[i][j]=dp[i-1][j-1]+a[(i-1)%l];
if (dp[i-1][j+5]!=-1 && (dp[i-1][j+5]+b[(i-1)%l]<dp[i][j] || dp[i][j]==-1)) dp[i][j]=dp[i-1][j+5]+b[(i-1)%l];
}
if (dp[i-1][9]!=-1) dp[i][10]=dp[i-1][9]+a[(i-1)%l];
if (dp[i-1][14]!=-1 && (dp[i-1][14]+a[(i-1)%l]<dp[i][10] || dp[i][10]==-1)) dp[i][10]=dp[i-1][14]+a[(i-1)%l];
for (j=11;j<=14;j++)
if (dp[i-1][j-1]!=-1) dp[i][j]=dp[i-1][j-1]+a[(i-1)%l];
}
min=999999999;
for (i=0;i<=14;i++)
if (dp[l*n][i]<min && dp[l*n][i]!=-1) min=dp[l*n][i];
printf("%d\n",min);
}
return 0;
}