錢倉 最大欄位和 貪心 模擬

2021-08-09 06:38:15 字數 1053 閱讀 8308

1.錢倉(barn.cpp)

【問題描述】

fanvree家有n個錢倉,他們以構成乙個環,從1到n順時針方向分布,也就是說第i個錢倉會和第i-1個和第i+1個相鄰,特別地,第n個錢倉和第1個錢倉相鄰。眾所周知,fanvree是個極其聰明的人,所以,他不會把錢全部放在同乙個錢倉,他會平均分配,每個錢倉放1mol的錢。

在開始時,每個錢倉會有ci mol的錢,保證σci=n, fanvree會推著他的小車將錢從乙個錢倉順時針運到乙個錢倉。由於小車比較小,每次只能運1mol的錢,而且fanvree要求每mol錢最多只能運一次。

如果這mol錢被運輸且運輸距離為d,那麼fanvree要付出d2的費用,問fanvree付出的費用最少是多少。

【輸入格式】

第一行包含乙個整數n

接下來n行,描述ci

【輸出格式】

僅包含乙個整數,fanvree最小付出費用

【輸入樣例】101

0020

0122

2【輸出樣例】

33【資料規模與約定】

對於10%的資料,n<=10

對於60%的資料,n<=5000

對於100%的資料,n<=100000,σci=n

題解:任意一段距離k=a+b,k^2>a^2+b^2,所以考慮將最近的錢移向空倉,所以要考慮斷點,斷點部分一定是要保證移動方向在陣列中是唯一的,所以第i個倉一定是》=1的,所以考慮最大欄位和。

總結:針對環狀的問題,一定要拆成一條鏈,方法就是複製後接在後面,這樣只需要選取合法的一段即可。

#include #include #include #include #include #define n 300000

using namespace std;

int n,val[n];

long long ans=0;

queueq;

int main()

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

printf("%lld\n",ans);

return 0;

}

最大欄位和

include include include include include using namespace std 最大欄位和問題描述 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0,...

最大欄位和

1049 最大子段和 難度 基礎題 n個整數組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的連續子段和的最大值。當所給的整數均為負數時和為0。例如 2,11,4,13,5,2,和最大的子段為 11,4,13。和為20。input 第1行 整數序列的長度n 2 n 5...

最大欄位和

題目描述 給出一段序列,選出其中連續且非空的一段使得這段和最大。輸入格式 第一行 是乙個正整數n,表示了序列的長度。第二行 包含n個整數num i 描述了這段序列。輸出格式 第一行 乙個整數,為最大的子段和是多少。第二行 起始位置和終止位置 輸入樣例 72 4 3 1 2 4 3 輸出樣例 43 5...