又到了一年一度的明明生日了,明明想要買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 10
輸出樣例#1: 複製
1
輸入樣例#2: 複製
3 30 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 5100using
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 現在明明想知道,他最少要花多少錢。可以這樣想,購買這些東西會構成乙個樹狀關係,除了根之外其他點都按...