noip2018 pre——Dp

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)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值