数据是否有误?顺便求调
  • 板块P1220 关路灯
  • 楼主arfdou
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/24 14:00
  • 上次更新2024/9/24 18:56:14
查看原帖
数据是否有误?顺便求调
431995
arfdou楼主2024/9/24 14:00

数据#2输入一共有101行,而n=50

顺便区间dp求调

#include <iostream>
using namespace std;
#define max(a,b) a>b?a:b 
const int Int_Max=2147483647;
int n,c; 
int coord[52];
int power[52];
void Input(){
	cin>>n>>c;
	cin>>coord[1]>>power[1];
	for(int i=2;i<=n;i++){
		cin>>coord[i]>>power[i];
		power[i]+=power[i-1];
	}
}
int f[52][52][2];
void dp(){
	f[c][c][0]=0;
	f[c][c][1]=0;
	for(int len=2;len<=n;len++){
		for(int L=max(c+1-len,1);L<=c&&L+len-1<=n;L++){
			int R=L+len-1;
			if(L+1<c){
				f[L][R][0]=min(f[L+1][R][0]+(coord[L+1]-coord[L])*(power[n]-power[R]+power[L]),f[L+1][R][1]+(coord[R]-coord[L])*(power[n]-power[R]+power[L]));
			}else if(L+1==c){
				f[L][R][0]=f[L+1][R][1]+(coord[R]-coord[L])*(power[n]-power[R]+power[L]);
			}
			if(R-1>c){
				f[L][R][1]=min(f[L][R-1][0]+(coord[R]-coord[L])*(power[n]-power[R-1]+power[L-1]),f[L][R-1][1]+(coord[R]-coord[R-1])*(power[n]-power[R-1]+power[L-1]));
			}else if(R-1==c){
				f[L][R][1]=f[L][R-1][0]+(coord[R]-coord[L])*(power[n]-power[R-1]+power[L-1]);
			} 
		}
	}
	
}
int main(){
	Input();
	dp();
	cout<<min(f[1][n][0],f[1][n][1]);
	/*
	cout<<endl<<f[1][n][0]<<endl<<f[1][n][1];
	for(int i=1;i<=n;i++){
		cout<<endl;
		for(int j=1;j<=n;j++){
			cout<<f[i][j][0]<<' '<<f[i][j][1]<<"   ";
		}
	}*/
	return 0;
}

感觉没啥问题,样例也过了,但是#2以后都没过

2024/9/24 14:00
加载中...