10pts求调
  • 板块P1220 关路灯
  • 楼主arfdou
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/29 17:14
  • 上次更新2024/9/29 20:26:59
查看原帖
10pts求调
431995
arfdou楼主2024/9/29 17:14
#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]);
	return 0;
}
2024/9/29 17:14
加载中...