送餐題(自我感覺難)

2021-10-05 05:13:18 字數 1595 閱讀 3236

題意:送餐,有n個顧客坐在乙個x軸上,第i個人的位置是xi,他的不滿意成長度為bi每分鐘。你的起始位置為x,送餐速度為v每分鐘,要一次性把所有餐送完。叫餐的人得到餐的時間和順序不同,不滿意度總和也就不同。合格的送餐員要讓客戶體驗最好,請問最小不滿意度和為多少。

自我解題思考過程:看到這一題的不滿意度就想到了那個主席議員題和屌絲題雖然題目一點都不一樣,剛開始我一想到就是設個二維陣列dp[i][j]用來表示[i,j]這段送完後憤怒值的最優解,就開始琢磨它的動態規律寫動態方程。自己的想法是,分解為向左送餐最小不滿意度和向右送餐的最小不滿意度之和」不出所料啊「,寫不出來。主要是自己太菜,意料之中。

正確題解:

從餐廳為x的位置作為dp的起始點,dp[i][j][k]表示[i,j]這段送完後不滿意值的最優解,k=0表示停在左邊i處,k=1停在右邊j處。因為送貨肯定是先送離自己近的,越過一家就肯定浪費時間了。每次送完乙個區間,就要加上沒送到的區間的不滿值。

dp[i][j][0] = min ( dp[i][j][0], dp[i + 1][j][1] + ( sum[i] + sum[n] - sum[j] ) * ( a[j].x - a[i].x ) );

dp[i][j][0] = min ( dp[i][j][0], dp[i + 1][j][0] + ( sum[i] + sum[n] - sum[j] ) * ( a[i + 1].x - a[i].x ) );

dp[i][j][1] = min ( dp[i][j][1], dp[i][j - 1][0] + ( sum[i - 1] + sum[n] - sum[j - 1] ) * ( a[j].x - a[i].x ) );

p[i][j][1] = min ( dp[i][j][1], dp[i][j - 1][1] + ( sum[i - 1] + sum[n] - sum[j - 1] ) * ( a[j].x - a[j - 1].x ))

**:#include< iostream>

#include< algorithm>

#include< cstdio>

#include< cmath>

#include< cstring>

#include< string>

const double pi = acos ( -1.0 );///最精確的pai值

typedef long long ll;

const int inf = 0x3f3f3f3f;

using namespace std;

struct node

a[1010];

int n, v, x;

int sum[1010], dp[1010][1010][2];

bool cmp( node a, node b )

int main()

for ( int i=1;i<=n;i++)

for ( int j=1;j<=n;j++)

dp[i][j][0] = dp[i][j][1] = inf;

dp[res][res][0] = dp[res][res][1] = 0;

for ( int i = res; i >= 1; i-- )

}cout<}return 0;

}

自我感覺常用Linux命令

關閉防火牆的命令 systemctl stop firewalld.service 開機不啟動防火牆的命令 systemctl disable firewalld.service 啟動防火牆的命令 systemctl start firewalld.service 開機啟動防火牆的命令 system...

氣球(自我感覺比老周好)

2 氣球 b.pas cpp c 題目描述 輸入格式 b.in 第一行,乙個整數n。1 n 1000000。第二行,n個整數,第i個整數是hi。1 hi 1000000。輸出格式 b.out 乙個整數,最少的子彈數量。資料規模 對於40 的資料,n 4000。輸入樣例 b.in 輸出樣例 b.out...

重量是一種自我感覺良好的幻覺

大重量是一種自我感覺良好的幻覺?我覺得這是每乙個健身愛好者必經的過程。經過了這個過程也就說明自己成長了,進步了。有的人能舉起很大的重量,但是肌肉線條看起來並不漂亮有的甚至看起來很胖的樣子。有的人能舉起的重量並不大但是肌肉線條卻很漂亮。要解釋這一點五個字就夠了,叫做 術業有專攻 用兩種比較典型的人群來...