Description
你要购买m种物品各一件,一共有n家商店,你到第i家商店的路费为d[i],在第i家商店购买第j种物品的费用为c[i][j],
求最小总费用。
Input
第一行包含两个正整数n,m(1<=n<=100,1<=m<=16),表示商店数和物品数。
接下来n行,每行第一个正整数d[i](1<=d[i]<=1000000)表示到第i家商店的路费,接下来m个正整数,
依次表示c[i][j](1<=c[i][j]<=1000000)。
Output
一个正整数,即最小总费用。
Sample Input
3 4 5 7 3 7 9 2 1 20 3 2 8 1 20 1 1
Sample Output
16
HINT
在第一家店买2号物品,在第二家店买剩下的物品。
蠢了……这么裸的状压dp都没看出来……
设$dp[i][j]$表示在前$i$个商店里,买的东西的状态为$j$时的最小花费
然后每一个商店跑一下背包就可以啦
1 //minamoto 2 #include3 using namespace std; 4 template inline bool cmin(T&a,const T&b){ return a>b?a=b,1:0;} 5 int n,m,lim,c[105][21],d[105],dp[105][(1<<16)+5]; 6 int main(){ 7 // freopen("testdata.in","r",stdin); 8 scanf("%d%d",&n,&m),lim=1<