Dp专题
1011: KC的瓷器 (porcelain)
题目描述
KC来到了一个盛产瓷器的国度。他来到了一位商人的店铺。在这个店铺中,KC看到了一个有n(1<=n<=100)排的柜子,每排都有一些瓷器,每排不超过100个。那些精美的艺术品使KC一下心动了,决定从N排的商品中买下m(1<=m<=10000)个瓷器。
这个商人看KC的脸上长满了痘子,就像苔藓一样,跟精美的瓷器相比相差太多,认为这么精致的艺术品被这样的人买走艺术价值会大打折扣。商人感到不爽,于是规定每次取商品只能取其中一排的最左边或者最右边那个,想为难KC。
现在KC又获知每个瓷器的价值(用一个不超过100的正整数表示),他希望取出的m个商品的总价值最大。
输入
第一行包括两个正整数n,m;
接下来2到n+1行,第i行第一个数表示第i排柜子的商品数量Si,接下来Si个数表示从左到右每个商品的价值。
输出
只有一个正整数,即m个商品最大的总价值。
【数据范围】
对于10%的数据,Si=1,1<=i<=n。
对于另外10%的数据,n=1.
solution
令f[i][j]表示前i个柜子买j个瓷器的最大收益
预处理g[i][j]表示第i个柜子买j个瓷器的最大收益
效率O(n^3+n^2*m)
1103: 画山 paint
题目描述
有一张大小为n*m的白纸,小R想在纸上画一片绵延的群山。
为了描述方便,我们将纸张表示在坐标系上,四个顶点的坐标分别为(0,0),(n,0),(0,m),(n,m)。
小R有一只神奇的画笔,能画p种不同的线段,每种线段用两个参数a,b表示,若画笔停留的位置为(x,y),则能画一条从(x,y)到(x+a,y+b)的线段,然后画笔停留在(x+a,y+b),每种线段能画任意次。
小R需要从(0,0)开始,在(n,0)结束,在不超过纸张大小的范围内(可以在边界上)画一片绵延的群山。求一共有多少种本质不同的山形(亦即我们不认为画两次(1,1)和画一次(2,2)有任何区别)。由于结果可能会很大,你只需输出对1,000,000,007取模后的值。
输入
三个整数n,m,p分别描述纸张的大小和可画线段的总数。
接下来p行每行两个参数ai,bi描述画笔可画的第i种线段。
输出
一个整数表示本质不同的山形数对1,000,000,007取模后的值。
【数据范围】
对于40%的数据,n,m,p≤10
对于100%的数据,n,m,p≤100,1≤ai≤10,-10≤bi≤10
考虑如何防止画出形状一样的山
把相同斜率的压在一起,记这种斜率能多少步
令f[i][j][k]表示当前走到(i,j),最后一步的斜率为k
转移时枚举一个点,枚举斜率和步数,就可以得到(x',y')
那么我们把f[i][j][所有的k]加起来,记为S[i][j]
f[i][j][k]=S[x][y]-f[x][y][k];
效率O(nmp)