洛谷 P1194 買禮物

2022-03-03 08:44:48 字數 1450 閱讀 8735

又到了一年一度的明明生日了,明明想要買bb樣東西,巧的是,這bb樣東西**都是aa元。

但是,商店老闆說最近有**活動,也就是:

如果你買了第ii樣東西,再買第jj樣,那麼就可以只花k_ki,j​元,更巧的是,k_ki,j​竟然等於k_kj,i​。

現在明明想知道,他最少要花多少錢。

輸入格式:

第一行兩個整數,a,ba,b。

接下來bb行,每行bb個數,第ii行第jj個為k_ki,j​。

我們保證k_=k_ki,j​=kj,i​並且k_=0ki,i​=0。

特別的,如果k_=0ki,j​=0,那麼表示這兩樣東西之間不會導致優惠。

輸出格式:

乙個整數,為最小要花的錢數。

輸入樣例#1: 複製

1 1

0

輸出樣例#1: 複製

1

輸入樣例#2: 複製

3 3

0 2 4

2 0 2

4 2 0

輸出樣例#2: 複製

7

樣例解釋22

先買第22樣東西,花費33元,接下來因為優惠,買1,31,3樣都只要22元,共77元。

(同時滿足多個「優惠」的時候,聰明的明明當然不會選擇用44元買剩下那件,而選擇用22元。)

資料規模

對於30\%30%的資料,1 \le b \le 101≤b≤10。

對於100\%100%的資料,1 \le b \le 500,0 \le a,k_ \le 10001≤b≤500,0≤a,ki,j​≤1000。

2018.7.25新添資料一組

#include#define n 5100

using

namespace

std;

int a,b,g[5010][5050

],minn[n],n;

bool

vis[n];

long

long

ans;

intmain()

for(int i=0;i<=b;i++)

g[b+1][i]=a,g[i][b+1]=0x7fffffff

; memset(minn,

0x7f,sizeof

(minn));

n=b+1

;

int k=0;minn[n]=0

;

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

vis[k]=1

;

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

; }

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

ans+=minn[i];

printf(

"%lld\n

",ans);

return0;

}

洛谷P1194 買禮物

又到了一年一度的明明生日了,明明想要買b樣東西,巧的是,這b樣東西 都是a元。但是,商店老闆說最近有 活動,也就是 如果你買了第i樣東西,再買第j樣,那麼就可以只花k i,j 元,更巧的是,k i,j 竟然等於k j,i 現在明明想知道,他最少要花多少錢。輸入格式 第一行兩個整數,a,b。接下來b行...

洛谷 P1194 買禮物

這道題其實就是轉化乙個模型就可以了。買了乙個另外乙個又優惠,其實就相當於在優惠的時候連一條邊,因為不可能多買,所以就是建一棵最小生成樹。最後因為肯定買了一件物品,要加上最初的單價。include using namespace std struct node node e 510000 int pr...

洛谷 P1194 買禮物

又到了一年一度的明明生日了,明明想要買b樣東西,巧的是,這b樣東西 都是a元。但是,商店老闆說最近有 活動,也就是 如果你買了第i樣東西,再買第j樣,那麼就可以只花 k 元,更巧的是,k 竟然等於 k 現在明明想知道,他最少要花多少錢。可以這樣想,購買這些東西會構成乙個樹狀關係,除了根之外其他點都按...