牛客等級之題N1(8 4場)購物

2021-10-23 10:29:15 字數 1239 閱讀 5519

題目鏈結

在遙遠的東方,有一家糖果專賣店。

這家糖果店將會在每天**一些糖果,它每天都會生產出m個糖果,第i天的第j個糖果**為c[i][j]元。

現在的你想要在接下來的n天去糖果店進行選購,你每天可以買多個糖果,也可以選擇不買糖果,但是最多買m個。(因為最多隻生產m個)買來糖果以後,你可以選擇吃掉糖果或者留著之後再吃。糖果不會過期,你需要保證這n天中每天你都能吃到至少乙個糖果。

這家店的老闆看你經常去光顧這家店,感到非常生氣。(因為他不能好好睡覺了)於是他會額外的要求你支付點錢。具體來說,你在某一天購買了 k 個糖果,那麼你在這一天需要額外支付 k

2k^2

k2的費用。

那麼問題來了,你最少需要多少錢才能達成自己的目的呢?

第一行兩個正整數n和m,分別表示天數以及糖果店每天生產的糖果數量。

接下來n行(第2行到第n+1行),每行m個正整數,第x+1行的第y個正整數表示第x天的第y個糖果的費用。

輸出只有乙個正整數,表示你需要支付的最小費用。

3 2 

1 1100 100

10000 10000

107
5 5

1 2 3 4 5

2 3 4 5 1

3 4 5 1 2

4 5 1 2 3

5 1 2 3 4

10
看到不少人用 dp,這題其實可以用優先佇列解決,我們首先要知道乙個公式:

n 2=

1+3+

5+⋯+

2∗n−

1n^2=1+3+5+\cdots+2*n-1

n2=1+3

+5+⋯

+2∗n

−1那麼我們把每一天的商品先按**排序,然後依次加 2∗i

−1

2*i-1

2∗i−

1 存入優先佇列,每天去乙個隊頭即可,ac**如下:

#include

using

namespace std;

typedef

long

long ll;

int a[

305]

,c[305

],n,m,sum=0;

intmain()

cout

}

牛客等級之題N1(8 4場) 購物 dp動態規劃

在遙遠的東方,有一家糖果專賣店。這家糖果店將會在每天 一些糖果,它每天都會生產出m個糖果,第i天的第j個糖果 為c i j 元。現在的你想要在接下來的n天去糖果店進行選購,你每天可以買多個糖果,也可以選擇不買糖果,但是最多買m個。因為最多隻生產m個 買來糖果以後,你可以選擇吃掉糖果或者留著之後再吃。...

牛客等級之題N2

目錄牛客等級之題n2 8.3場 設大半圓的半徑為 r 左小半圓半徑為 r r kr 0 pi r 2 pi k 2r 2 pi r kr 2 2s r 2 k k 2 frac k frac 時 r 2 最小 include using namespace std const double pi a...

牛客等級之題N1(8 13場)3的倍數

最容易想到的辦法是通過記錄每個字串中每個字母出現的次數,然後將所有n個字串進行各種組合,確定最多可選擇的字串數。但是這樣的複雜度為2的n次方,肯定不行。所以想到用類似於字首和的方式,遍歷所有字串過程中,判斷當前遍歷到的字串的狀態與之前某位置字串狀態是否相同。對於狀態而言,可以用狀壓來完成,實際上也就...