今天题有点多啊啊~汪~
四道,下午AK至5:13
T1jzoj1285. 奶酪厂
Description
奶牛买了一个奶酪厂生产奶酪,已知每周生产一单位奶酪的费用为C_i,每周可以生产任意数量的奶酪,现在要为接下来N(1<=N<=10,000)周做生产计划。
厂里有一个仓库,存储量无穷大,可以用来存储暂时不用的奶酪,每单位奶酪每周花费S(1<=S<=100)。
告诉你每周客户的需求量Y_i(0<=Y_i<=10,000),请你帮忙用最少的钱满足这些需求。
Input
第1行:两个空格隔开的整数N,S
第2-N+1行:每行两个空格隔开的整数C_i和Y_i。
Output
输出一个整数表示最少花费。注意答案可能会超出longint范围。
Sample Input
4 5
88 200
89 400
97 300
91 500
Sample Output
126900
Data Constraint
Hint
【样例说明】
第一周生产200单位,第二周生产700单位,400给客户,300存在仓库里留给第三周,第四周生产500单位。
想法:
贪心,记录前面最小的c[x]+(i-x)*s,跟当前c[i]比较
DP+单调队列:队列按照位置的增加而c[i]如果递减,则放弃之
T2jzoj1286. 太空电梯
Description
奶牛们想用K(1<=K<=400)中石块制造一个太空电梯去太空旅行,每种石块有自己的高度h_i(1<=h_i<=100)和数量c_i(1<=c_i<=10),为了避免宇宙射线的干扰,每种石块不能超过最高可以达到的高度a_i(1<=a_i<=40000)。
帮助奶牛用石块堆积一个最高的太空电梯。
Input
第1行:一个整数K
第2到K+1行:每行3个用空格隔开的整数h_i,a_i,c_i
Output
输出一个高度H,表示最大高度。
Sample Input
3
7 40 3
5 23 8
2 52 6
Sample Output
48
Data Constraint
Hint
【样例说明】
从上到下依次是6个3号石块、3个1号石块和3个2号石块,注意放4个2号石块在3个1号石块的下面是不行的,因为1号石块最高不能超过40,而现在最上面的1号石块高度达到41,所以不行。
想法:
判定性DP,以a[i]为第一关键字快排,
设f[i,j]为到第i种石块取到j高度能否可行
T3jzoj3526. 【NOIP2013模拟11.7A组】不等式(solve)
Description
小z热衷于数学。
今天数学课的内容是解不等式:L<=S*x<=R。小z心想这也太简单了,不禁陷入了深深的思考:假如已知L、R、S、M,满足L<=(S*x)mod M<=R的最小正整数x该怎么求呢?
Input
第一行包含一个整数T,表示数据组数,接下来是T行,每行为四个正整数M、S、L、R。
Output
对于每组数据,输出满足要求的x值,若不存在,输出-1。
Sample Input
1
5 4 2 3
Sample Output
2
Data Constraint
30%的数据中保证有解并且答案小于等于10^6;
另外20%的数据中保证L=R;
100%的数据中T<=100,M、S、L、R<=10^9。
想法:
l<=s*x mod m<=r转化
l<=s*x-m*y<=r转化
-l<=my-sx<=-r,这是[l,r]没有s的倍数
-l+kx<=my-sx+kx<=-r+kx转化
(-l mod s)<=my mod s <=(-r mod s)
等于求l<=s*x mod m<=r
递归求解即可
边界l=0,s mod m=0
s:=s mod m;
l<=s*x mod m<=r的简单解x=(l-1)div s+1;
如果简单解符合要求,返回
否则求y,此时 简单解x=(r+m*y)div s
T4jzoj3505. 【NOIP2013模拟11.4A组】积木(brick)
Description
小A正在搭积木。有N个位置可以让小A使用,初始高度都为0。小A每次搭积木的时候,都会选定一个拥有相同高度的区间[A..B],然后将位置[A+1..B-1]上的所有积木的高度加一。不幸的是,小A把积木搭好之后没多久,小A调皮的弟弟就将其中若干个位置上的积木弄倒了。小A想知道他原来的积木是如何摆放的,所以他求助于你,请你告诉他原来有多少种可能的摆法。
Input
第一行为一个正整数N,表示小A有N个位置。
第二行有N个由空格分隔的整数Hi,表示第i个位置的积木高度。-1表示这个位置上的积木已经被弄倒了。
Output
唯一的一行,输出包括可能的摆法mod 1,000,000,007的结果。
Sample Input
输入1:
3
-1 2 -1
输入2:
-1 -1 -1
输入3:
6
-1 -1 -1 2 -1 -1
Sample Output
输出1:
0
输出2:
2
输出3:
3
Data Constraint
对于50%的数据 1<=N<=1000 -1<=Hi<=1000
对于80%的数据 1<=N<=10000
对于100%的数据 1<=N<=20000 -1<=Hi<=10000
想法:
水法:DP
设f[i,j]表示到第i个点位置,积木高度为j的方案总数
很明显因为只能修改一段高度相同的区间,所以height[i]-height[i-1]<=1,
所以f[i,j]=f[i-1,j-1~j+1]得到
输出f[n,0]
打滚动+减少mod的次数