description
bpm想要購買m種物品,每種物品只用購買一件。現在一共有n家商店,但走到第i家商店的路費為d[i],而在第i家商店購買第j種物品的花費為c[i,j]。問你最少需要花費多少錢。
input
第一行包含兩個正整數n,m,表示商店數和物品數。
接下來n行,每行先是乙個正整數d[i],表示到第i家商店的路費。接下來m個正整數,依次表示c[i,j]。
output
一行乙個整數,表示最小花費。
sample input
3 4
5 7 3 7 9
2 1 20 3 2
8 1 20 1 1
sample output
16 hint
對於前30%的資料,1<=n,m<=7
對於前100%的資料,1<=n<=100,1<=m<=16,d[i],c[i,j]<=1000000
做法:從m的範圍可以看出這是乙個狀態壓縮dp
**如下:
#include
#include
#include
#include
using
namespace
std;
#define min(x, y) (x) < (y) ? (x) : (y)
int f[107][70000],d[107],cost[107][17],n,m;
inline
int read()
while (ch>='0'&&ch<='9')
return x*p;
}int main()
for (int i=0;i<=n;i++)
for (int j=0;j<=(1
<< m)-1;j++)
f[i][j]=0x7f7f7f7f;
f[0][0]=0;
for (int i=1;i<=n;i++)
for (int j=0;j<=(1
<< m)-1;j++)
f[i][j]=min(f[i-1][j],f[i][j]);
}cout
<1
<< m)-1];
}
2023年8月15日提高組T2 購買
bpm想要購買m種物品,每種物品只用購買一件。現在一共有n家商店,但走到第i家商店的路費為d i 而在第i家商店購買第j種物品的花費為c i,j 問你最少需要花費多少錢。第一行包含兩個正整數n,m,表示商店數和物品數。接下來n行,每行先是乙個正整數d i 表示到第i家商店的路費。接下來m個正整數,依...
2023年8月9日提高組T2 覆蓋
現在小b拿到了一條長度為n的木塊,初始時上面什麼顏色都沒有。為了美觀,現在小b希望把它的n個單位長度分別塗上紅 綠 藍三種顏色,每種顏色可以用乙個大寫字母表示,分別是 rgb。作為乙個不合格的油漆工,每次你可以把一段連續的木版塗成隨意一種顏色,但是你發現,後塗的顏色會覆蓋先塗的顏色。為了方便,請你用...
2023年8月8日提高組T2 呀!回文串
小b的名字是由前n個小寫字母組成的乙個長度為m字串。一天,小b看上了乙個金髮碧眼的漂亮妹子,但妹子在知道了小b的名字後,就無情地拋棄了小b,而原因竟然是小b的名字不夠優美!在小b的追問下,妹子告訴小b,只有回文串是優美的。於是小b決定把自己的名字變得優美,但每加入或刪除乙個字母都要付出一定的代價。為...