几道动态规划(递推)的题
来源:互联网 发布:js正则去掉html标签 编辑:程序博客网 时间:2024/05/28 18:43
几道动态规划(递推)的题
这些动态规划都是同一种方法,利用递推依次求解最优项。
- P1259 饥饿的奶牛
- P1258 公交乘车
- P1257 轮船问题
- P1251 圆上不相交弦
描述 Description
牛在饲料槽前排好了队。饲料槽依次用1到N(1<=N<=2000)编号。每天晚上,一头幸运的牛根据约翰的规则,吃其中一些槽里的饲料。
约翰提供B个区间的清单。一个区间是一对整数start-end,1<=start<=end<=N,表示一些连续的饲料槽,比如1-3,7-8,3-4等等。牛可以任意选择区间,但是牛选择的区间不能有重叠。
当然,牛希望自己能够吃得越多越好。给出一些区间,帮助这只牛找一些区间,使它能吃到最多的东西。
在上面的例子中,1-3和3-4是重叠的;聪明的牛选择{1-3,7-8},这样可以吃到5个槽里的东西。 输入格式
Input Format
第一行一个整数n,表示奶牛的组数。(1<=n<=1000) 第2~n+1行,每行两个整数start和end,描述了一组奶牛提出的请求。
输出格式 Output Format
一个整数,表示最多有多少个食桶可以被食用。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int N;struct Teams{ int x, y, L; int sum;}F[1100];bool cmp(Teams a, Teams b) {return (a.x < b.x);}int main(){ cin >> N; memset(F, 0, sizeof(F)); for(int i = 1; i <= N; i++){ cin >> F[i].x >> F[i].y; F[i].L = abs(F[i].x - F[i].y) + 1; } sort(F + 1, F + 1 + N, cmp); static int maxx; F[1].sum = F[1].L; for(int i = 2; i <= N; i++){ maxx = -1; for(int k = 0; k <= i - 1; k++) if(F[i].x > F[k].y) maxx = max(maxx, F[i].L + F[k].sum); F[i].sum = maxx; } maxx = -1; for(int i = 1; i <= N; i++) maxx = max(maxx, F[i].sum); cout << maxx << endl; return 0;}
描述 Description
一个特别的单行街道在每公里处有一个汽车站。顾客根据他们乘坐汽车的公里使来付费。例如下表就是一个费用的单子。
没有一辆车子行驶超过10公里,一个顾客打算行驶n公里(1<=n<=100),它可以通过无限次的换车来完成旅程。最后要求费用最少。
输入格式 Input Format
第一行十个整数分别表示行走1到10公里的费用(<=500)。注意这些数并无实际的经济意义,即行驶10公里费用可能比行驶一公里少。
第二行一个整数n表示,旅客的总路程数。
输出格式 Output Format
仅一个整数表示最少费用。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int N;int Price[20];int minpay[120];int main(){ for(int i = 1; i <= 10; i++) cin >> Price[i]; cin >> N; memset(minpay, 10, sizeof(minpay)); for(int i = 1; i <= 10; i++) for(int k = 0; k <= i / 2; k++) minpay[i] = min(minpay[i], Price[k] + Price[i - k]); for(int i = 11; i <= N; i++) for(int k = 0; k <= i / 2; k++) minpay[i] = min(minpay[i], minpay[k] + minpay[i - k]); cout << minpay[N] << endl; return 0;}
描述 Description
某国家被一条河划分为南北两部分,在南岸和北岸总共有N对城市,每一城市在对岸都有一个城市作为友好城市。每一对友好城市都希望有一条航线来往,于是他们向政府提出了申请。由于河终年有雾。政府决定允许开通的航线就互不交叉(如果两条航线交叉,将有很大机会撞船)。兴建哪些航线以使在安全条件下有最多航线可以被开通。
输入格式 Input Format
第一行两个由空格分隔的整数x,y,10〈=x,y〈=60000,x,y中较长的表示河的长度另一个表示宽。第二行是一个整数N(1<=N<=5000),表示分布在河两岸的城市对数。接下来的N行每行有两个由空格分隔的正数C,D(C、D〈=x〉,描述每一对友好城市与河起点的距离,C表示北岸城市的距离而D表示南岸城市的距离。在河的同一边,任何两个城市的位置都是不同的。
输出格式 Output Format
一个整数,表示安全条件下能够开通的最大航线数目。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int L, N;struct FriendlyCity{ int x, y; int sum;//当以该点作为终点,航线最多的数量;}F[5100];bool cmp(FriendlyCity a, FriendlyCity b) {return (a.x < b.x);}void Putin(){ int a, b; cin >> a >> b >> N; L = max(a, b); memset(F, 0, sizeof(F)); for(int i = 1; i<= N; i++){ cin >> a >> b; F[i].x = a; F[i].y = b; } sort(F + 1, F + 1 + N, cmp);}void DP(){ F[1].sum = 1; int maxx; for(int i = 2; i <= N; i++){ maxx = 0; for(int k = i - 1; k >= 1; k--) if(F[i].y > F[k].y) maxx = max(maxx, F[k].sum); F[i].sum = maxx + 1; } maxx = 0; for(int i = 1; i <= N; i++) maxx = max(maxx, F[i].sum); cout << maxx << endl;}int main(){ Putin(); DP(); return 0;}
描述 Description
圆周上有N个点。连接任意多条(可能是0条)不相交的弦(共用端点也算相交)共有多少种方案?
输入格式Input Format
读入一个数N。1<=N<=1000。
输出格式 Output Format
由于结果可能很大,你只需要输出这个答案mod 12345的值。
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int M;int F[1010];int main(){ cin >> M; memset(F, 0, sizeof(F)); F[0] = 1; F[1] = 1; F[2] = 2; for(int i = 3; i <= M; i++){ for(int k = 0; k <= i - 2; k++) F[i] += (F[k] * F[i - 2 - k]) % 12345; F[i] += F[i - 1]; F[i] %= 12345; } cout << F[M] << endl;}
- 几道动态规划(递推)的题
- 动态规划----递推
- 动态规划/递推
- 动态规划,递推(杆子的排列,uva 1638)
- 动态规划 递推三角形
- 递推等价-动态规划
- 动态规划的记忆搜索与递推
- 乘积最大&蓝桥杯最大的算式 动态规划 递推
- HDU2018 母牛的故事 动态规划入门-递推
- 动态规划 问题之数字三角形(倒序递推)
- BNUOJ 4064 条形码设计 (动态规划 + 递推)
- NYOJ 题目252 01串(动态规划,递推)
- zoj 2604 Little Brackets(动态规划+递推+java)
- 数字三角形_递归_递推(动态规划)
- 动态规划,递推,高精度(Matches,uva 11375)
- 动态规划,递推,多段图(Ingenuous Cubrency,uva 11137)
- HDOJ 2041 超级楼梯(递推 动态规划)
- 斐波拉契数列=>多种方法的比较(分治、递归、动态规划/递推)
- 【YOLO】YOLO网络中参数的解读
- 如何自定义sort函数中的比较函数
- python爬虫——多线程+协程(threading+gevent)
- Java NIO学习(二)SelectionKey详解
- LeetCode 387 First Unique Character in a String
- 几道动态规划(递推)的题
- PLC教程
- 高可用集群heartbeat和调度器
- Zookeeper之Session和Http之Session类比学习
- 欢迎使用CSDN-markdown编辑器
- Android中将View的内容保存为图像的方法
- Linux source命令
- 规划问题的matlab求解
- 由结构体对齐而引发的思考(三)——考虑虚基类时c++类对象内存情况