wrong了一个,求助
  • 板块P1220 关路灯
  • 楼主Main_WF
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/7/5 14:51
  • 上次更新2023/10/27 21:50:11
查看原帖
wrong了一个,求助
302750
Main_WF楼主2022/7/5 14:51
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<climits>
using namespace std;
int f[60][60][10],n,c,d[60],p[60],pt[60][60],w[60][60],pw[60];

int main()
{
	scanf("%d%d",&n,&c);
	for(int i=1;i<=n;i++)scanf("%d%d",&d[i],&p[i]);
	for(int i=1;i<=n;i++)pw[i]=pw[i-1]+p[i];
	for(int i=1;i<=n;i++)
	{
		for(int j=i;j<=n;j++)
		{
			w[i][j]=w[j][i]=d[j]-d[i];
			pt[i][j]=pw[i-1]+pw[n]-pw[j];
		}
	}
	for(int i=c-1;i>=1;i--)f[i][c][0]=f[i+1][c][0]+w[i][i+1]*pt[i+1][c];
	for(int i=c+1;i<=n;i++)f[c][i][1]=f[c][i-1][1]+w[i-1][i]*pt[c][i-1];
	for(int j=c+1;j<=n;j++)
	{
		for(int i=c-1;i>=1;i--)
		{
			if(i==c-1)	f[i][j][0]=f[i+1][j][1]+w[i][j]*pt[i+1][j];
			else	f[i][j][0]=min(f[i+1][j][0]+w[i][i+1]*pt[i+1][j],f[i+1][j][1]+w[i][j]*pt[i+1][j]);
			if(j==c+1)	f[i][j][1]=f[i][j-1][0]+w[i][j]*pt[i][j-1];
			else	f[i][j][1]=min(f[i][j-1][0]+w[i][j]*pt[i][j-1],f[i][j-1][1]+w[j-1][j]*pt[i][j-1]);
		}
	}
	printf("%d",min(f[1][n][0],f[1][n][1]));
}
2022/7/5 14:51
加载中...