最新noip动态规划讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1, j2,……,jk,则所求的总和为:
v[j1]*w[j1]+v[j2]*w[j2]+ …+v[jk]*w[jk]。(其中*为乘号) 请你帮助金明设计一个满足要求的购物单。
Sample Problem4
【输入文件】 第1行,为两个正整数N m(其中N(<32000)表示总钱数,m(<60)为希
For i:=1 To n Do
For j:=1 To i-1 Do
If (a[i]<=a[j])And(f[i]<f[j]+1) Then f[i]:=f[j]+1;
Sample Problem2
合唱队形(NOIp2004)
【问题描述】 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K
望购买物品的个数。)从第2行到第m+1行,第j行给出了编号为j-1的物品的基 本数据,每行有3个非负整数v p q(其中v表示该物品的价格(v<10000),p表 示该物品的重要度(1~5),q表示该物品是主件还是附件。如果q=0,表示该 物品为主件,如果q>0,表示该物品为附件,q是所属主件的编号) 【输出文件】
01背包:有N件物品和一个容量为V的背包。第i件物品 的费用是c[i],价值是w[i]。求解将哪些物品装入背包 可使价值总和最大。
完全背包:有N种物品和一个容量为V的背包,每种物品 都有无限件可用。第i种物品的费用是c[i],价值是 w[i]。求解将哪些物品装入背包可使这些物品的费用总 和不超过背包容量,且价值总和最大。
只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最 大值。【输入样例】
1000 5 800 2 0
400 5 1
300 5 1
400 3 0
500 2 0 【输出样例】
2200
For i:=1 To n Do
For j:=m Downto a[i] Do
If f[j-a[i]]>-1 then
For i:=1 To n Do
For j:=Max Downto a[i] Do (a[i] To Max)
If f[j]<f[j-a[i]]+b[i] Then f[j]:=f[j-a[i]]+b[i];
Sample Problem4
金明的预算方案(NOIp2006)
【问题描述】
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己 专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购 买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明 就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个 主件的。如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件 可以有0个、1个或2个附件。附件不再有从属于自己的附件。金明想买的东西很 多,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为 5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格 (都是10元的整数倍)。他希望在不超过N元(可以等于N元)的前提下,使每 件物品的价格与重要度的乘积的总和最大。
Begin
00
If f[j-a[i]]+b[i]>f[j] Then f[j]:=f[j-a[i]]+b[i];
Ff:=f[j-a[i]]+b[i];
01
If j+s[i,1,1]<=m Then
If Ff+s[i,1,2]>f[j+s[i,1,1]] Then f[j+s[i,1,1]]:=Ff+s[i,1,2];
位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,
他 们 的 身 高 分 别 为 T1,T2,…,TK, 则 他 们 的 身 高 满 足 T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可 以使得剩下的同学排成合唱队形。 【输入文件】
输入文件第一行是一个整数N(2<=N<=100),表示同学的总数。第一行有n 个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高。
【输出文件】 输出文件包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
Sample Problem3
拦截导弹(NOIp1999)
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦 截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发 炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统 还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数), 计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种 导弹拦截系统。
noip动态规划讲解
动态规划实质: 枚举 + 递推
状态 状态转移方程
Sample Pwenku.baidu.comoblem1
从树的根到树的叶节点,最多 能取多少数?
贪心:答案错误 暴力搜索:如果数据大会超时
1
3
5
9
1
我们先将NOIp里的动态规划分分类:
最长不降子序列 背包 方格取数 石子归并 状态压缩 数学递推 顺序递推
样例: INPUT 389 207 155 300 299 170 158 65
统数)
OUTPUT 6(最多能拦截的导弹数) 2(要拦截所有导弹最少要配备的系
反例: 9 8 7 1 10 6 5 4
9 8 7 1 10 6 5 4 1 10 10
9 8 7 1 10 6 5 4 10 6 5 4
设有由n个不相同的整数组成的数列,记为: a(1)、a(2)、……、a(n)且a(i)<>a(j) (i,j<=n) 例如3,18,7,14,10,12,23,41,16,24。 若存在i1<i2<i3< … < ie 且有a(i1)<a(i2)< … <a(ie)则称为长度为e的不下降序列。如上例中3, 18,23,24就是一个长度为4的不下降序列,同时 也有3,7,10,12,16,24长度为6的不下降序列。 最长的不下降序列就是求长度最长的子序列。
v[j1]*w[j1]+v[j2]*w[j2]+ …+v[jk]*w[jk]。(其中*为乘号) 请你帮助金明设计一个满足要求的购物单。
Sample Problem4
【输入文件】 第1行,为两个正整数N m(其中N(<32000)表示总钱数,m(<60)为希
For i:=1 To n Do
For j:=1 To i-1 Do
If (a[i]<=a[j])And(f[i]<f[j]+1) Then f[i]:=f[j]+1;
Sample Problem2
合唱队形(NOIp2004)
【问题描述】 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K
望购买物品的个数。)从第2行到第m+1行,第j行给出了编号为j-1的物品的基 本数据,每行有3个非负整数v p q(其中v表示该物品的价格(v<10000),p表 示该物品的重要度(1~5),q表示该物品是主件还是附件。如果q=0,表示该 物品为主件,如果q>0,表示该物品为附件,q是所属主件的编号) 【输出文件】
01背包:有N件物品和一个容量为V的背包。第i件物品 的费用是c[i],价值是w[i]。求解将哪些物品装入背包 可使价值总和最大。
完全背包:有N种物品和一个容量为V的背包,每种物品 都有无限件可用。第i种物品的费用是c[i],价值是 w[i]。求解将哪些物品装入背包可使这些物品的费用总 和不超过背包容量,且价值总和最大。
只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最 大值。【输入样例】
1000 5 800 2 0
400 5 1
300 5 1
400 3 0
500 2 0 【输出样例】
2200
For i:=1 To n Do
For j:=m Downto a[i] Do
If f[j-a[i]]>-1 then
For i:=1 To n Do
For j:=Max Downto a[i] Do (a[i] To Max)
If f[j]<f[j-a[i]]+b[i] Then f[j]:=f[j-a[i]]+b[i];
Sample Problem4
金明的预算方案(NOIp2006)
【问题描述】
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己 专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购 买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明 就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个 主件的。如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件 可以有0个、1个或2个附件。附件不再有从属于自己的附件。金明想买的东西很 多,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为 5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格 (都是10元的整数倍)。他希望在不超过N元(可以等于N元)的前提下,使每 件物品的价格与重要度的乘积的总和最大。
Begin
00
If f[j-a[i]]+b[i]>f[j] Then f[j]:=f[j-a[i]]+b[i];
Ff:=f[j-a[i]]+b[i];
01
If j+s[i,1,1]<=m Then
If Ff+s[i,1,2]>f[j+s[i,1,1]] Then f[j+s[i,1,1]]:=Ff+s[i,1,2];
位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,
他 们 的 身 高 分 别 为 T1,T2,…,TK, 则 他 们 的 身 高 满 足 T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可 以使得剩下的同学排成合唱队形。 【输入文件】
输入文件第一行是一个整数N(2<=N<=100),表示同学的总数。第一行有n 个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高。
【输出文件】 输出文件包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
Sample Problem3
拦截导弹(NOIp1999)
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦 截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发 炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统 还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数), 计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种 导弹拦截系统。
noip动态规划讲解
动态规划实质: 枚举 + 递推
状态 状态转移方程
Sample Pwenku.baidu.comoblem1
从树的根到树的叶节点,最多 能取多少数?
贪心:答案错误 暴力搜索:如果数据大会超时
1
3
5
9
1
我们先将NOIp里的动态规划分分类:
最长不降子序列 背包 方格取数 石子归并 状态压缩 数学递推 顺序递推
样例: INPUT 389 207 155 300 299 170 158 65
统数)
OUTPUT 6(最多能拦截的导弹数) 2(要拦截所有导弹最少要配备的系
反例: 9 8 7 1 10 6 5 4
9 8 7 1 10 6 5 4 1 10 10
9 8 7 1 10 6 5 4 10 6 5 4
设有由n个不相同的整数组成的数列,记为: a(1)、a(2)、……、a(n)且a(i)<>a(j) (i,j<=n) 例如3,18,7,14,10,12,23,41,16,24。 若存在i1<i2<i3< … < ie 且有a(i1)<a(i2)< … <a(ie)则称为长度为e的不下降序列。如上例中3, 18,23,24就是一个长度为4的不下降序列,同时 也有3,7,10,12,16,24长度为6的不下降序列。 最长的不下降序列就是求长度最长的子序列。