求助!蒟蒻试水只有70分
查看原帖
求助!蒟蒻试水只有70分
233957
190040257a楼主2020/5/29 18:03

我的思路是到每一个路灯时再算这个路灯共消耗了多少电,就是 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;
}

求大佬解答

2020/5/29 18:03
加载中...