WOLF 面对,一群狼,每只狼都有一定的s攻击力和t攻击力。你杀死一只狼。你会受到这只狼的(s攻击力+旁边两只狼的t攻击力)这么多伤害~现在问你如何选择杀狼的顺序使的杀完所有狼时,自己受到的伤害最小。 3 3 5 7 8 2 0 输出 17 杀序号1的狼 3+2=5 杀序号2的狼 5+0=5 杀序号3的狼 7+0=7 总的伤害5+5+7=17;
我是这么写的:
#include<iostream>
#include<cmath>
#include<ctime>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#pragma GCC optimize(2)
using namespace std;
int f[101+10][101+10],s[101+10],t[101+10],n,ans;
int main()
{
freopen("wolf.in","r",stdin);
freopen("wolf.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s[i+10];
}
for(int i=1;i<=n;i++)
{
cin>>t[i+10];
}
for(int len=1;len<=n;len++)
{
for(int i=1;i<=n;i++)
{
int j=i+len-1;
if(j<=n)
f[i+10][j+10]=f[1+10][i-1+10]+t[i-1+10]+t[i+1+10]+f[j+1+10][n+10];
//printf("%d %d %d\n",i,j,f[i][j]);
}
}
for(int i=1;i<=n;i++)
{
ans+=s[i+10];
}
cout<<ans+f[1+10][n+10];
return 0;
}
结果会爆运行时错误,已经做了防越界处理了 哪位大佬帮忙看看谢谢