一道有趣的题目 安慰MM 动态规划

安慰MM

Description

在一个数轴上,有n个MM在哭泣(5555~一直哭).

tcboy也在这个数轴上,并恰好看到了这一幕,由于每个MM哭都会让tcboy损失一定的rp,于是tcboy有必要去安慰她们.(真命苦啊 T.T)

开始时,tcboy站在k号MM的旁边.

现在知道第i个MM哭泣每秒钟会使tcboy降低 w[i]的rp (单位rp/s).

而tcboy的行走速度很慢只有1m/s .

tcboy安慰MM的方式很特别(怎么安慰随便大家YY了..#@%^%#@),不需要花费时间.

请计算tcboy安慰完所有MM,会消耗掉的rp的最小值.

Format

Input

输入文件的第一行包含一个整数N,2<=N<=1000,表示MM的数量。 第二行包含一个整数V,1<=V<=N,表示开始时tcboy站在几号MM的旁边. 接下来的N行中,每行包含两个用空格隔开的整数D和W,用来描述每个MM,其中0<=D<=1000,0<=W<=1000。D表示MM在数轴上的位置(单位: m),W表示每秒钟会使tcboy降低W的rp。

Output

输出只有一行:一个整数,即消耗rp之和的最小值。结果不超过1,000,000,000。

Samples

输入数据 1

input1 复制代码
4
3
2 2
5 8
6 1
8 7

Copy

输出数据 1

output1 复制代码
56

Copy

cpp 复制代码
#include<bits/stdc++.h>
const int Max=1005;
using namespace std;
int f[Max][Max][2]={0},w[Max]={0},d[Max],n,v;
int main()
{
	cin>>n>>v;
	for(int i=1;i<=n;i++){
		cin>>d[i]>>w[i];
		w[i]+=w[i-1];
	}
	f[v][v][0]=f[v][v][1]=0;
	for(int i=v-1;i>=1;i--){
		f[i][v][0]=f[i+1][v][0]+(w[i]+(w[n]-w[v]))*(d[i+1]-d[i]);
		f[i][v][1]=f[i][v][0]+(w[i-1]+(w[n]-w[v]))*(d[v]-d[i]);
	}
	for(int j=v+1;j<=n;j++){
		f[v][j][1]=f[v][j-1][1]+(w[v-1]+(w[n]-w[j-1]))*(d[j]-d[j-1]);
		f[v][j][0]=f[v][j][1]+(w[v-1]+(w[n]-w[j]))*(d[j]-d[v]);
	}
	for(int i=v-1;i>=1;i--){
		for(int j=v+1;j<=n;j++){
			f[i][j][0]=min(f[i+1][j][0]+(w[i]+(w[n]-w[j]))*(d[i+1]-d[i]),f[i+1][j][1]+(w[i]+(w[n]-w[j]))*(d[j]-d[i]));
			f[i][j][1]=min(f[i][j-1][0]+(w[i-1]+(w[n]-w[j-1]))*(d[j]-d[i]),f[i][j-1][1]+(w[i-1]+(w[n]-w[j-1]))*(d[j]-d[j-1]));
		}
	}
	cout<<min(f[1][n][0],f[1][n][1]);
    return 0;
}
相关推荐
报错小能手19 小时前
深入理解 Linux 虚拟内存管理
开发语言·操作系统
Wilber的技术分享19 小时前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
邪神与厨二病19 小时前
Problem L. ZZUPC
c++·数学·算法·前缀和
黑客说19 小时前
AI驱动剧情,解锁无限可能——AI游戏发展解析
人工智能·游戏
和沐阳学逆向20 小时前
我现在怎么用 CC Switch 管中转站,顺手拿 Codex 举个例子
开发语言·javascript·ecmascript
小仙女的小稀罕20 小时前
听不清重要会议录音急疯?这款常见AI工具听脑AI精准转译
开发语言·人工智能·python
书到用时方恨少!20 小时前
Python random 模块使用指南:从入门到精通
开发语言·python
客卿12320 小时前
牛客刷题--找数字-- 字符串检测-字符串 双指针
java·开发语言
elseif12321 小时前
出题团招人【ETOI_】
c++
梯度下降中21 小时前
LoRA原理精讲
人工智能·算法·机器学习