我的思路是到每一个路灯时再算这个路灯共消耗了多少电,就是 cost=(a[i+1][j][1]+len(i,i+1)(i和i+1号路灯的距离)*cos[i] 其他思路都好像是正确的,但不知道为什么炸了,看了很久我感觉好像就是计算耗电的地方错了,但不知道自己的思路错在哪。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node
{
int cos,whe,num;
}aa[200];
int f[200][200][3];
int a[200][200][3];
int dis(int i,int j)
{
return abs(aa[i].whe-aa[j].whe);
}
int main()
{
int N,sta;
memset(f,0x3f,sizeof(f));
cin>>N>>sta;
for(int i=1;i<=N;i++)
{
cin>>aa[i].whe>>aa[i].cos;
}
f[sta][sta][1]=0;
f[sta][sta][2]=0;
for(int j=sta;j<=N;j++)
{
for(int i=j-1;i>0;i--)
{
int s=a[i+1][j][1]+dis(i,i+1);
f[i][j][1]=f[i+1][j][1]+(a[i+1][j][1]+dis(i,i+1))*aa[i].cos;
if((f[i+1][j][1]+(a[i+1][j][1]+dis(i,i+1))*aa[i].cos)>(f[i+1][j][2]+(a[i+1][j][2]+dis(i,j))*aa[i].cos))
{
f[i][j][1]=f[i+1][j][2]+(a[i+1][j][2]+dis(i,j))*aa[i].cos;
s=a[i+1][j][2]+dis(i,j);
}
a[i][j][1]=s;
int k=a[i][j-1][1]+dis(i,j);
f[i][j][2]=f[i][j-1][1]+(a[i][j-1][1]+dis(i,j))*aa[j].cos;
if(f[i][j][2]>(f[i][j-1][2]+(a[i][j-1][2]+dis(j-1,j))*aa[j].cos))
{
k=a[i][j-1][2]+dis(j-1,j);
f[i][j][2]=(f[i][j-1][2]+(a[i][j-1][2]+dis(j-1,j))*aa[j].cos);
}
a[i][j][2]=k;
}
}
cout<<min(f[1][N][1],f[1][N][2]);
return 0;
}
求大佬解答