MZ test17# NOIP模拟题 #T3 第3 题 登山机器人(robot.pas/cpp)
来源:互联网 发布:卖家多久查出淘宝联盟 编辑:程序博客网 时间:2024/06/04 21:45
第3 题 登山机器人(robot.pas/cpp)
【问题描述】
登山机器人是一个极富挑战性的高技术密集型科学研究项目,它为研究发展多智能体系统和多机器人之间的合作与对抗提供了生动的研究模型。
登山机器人可以携带有限的能量。在登山过程中,登山机器人需要消耗一定能量,连续攀登的路程越长,其攀登的速度就越慢。在对 n 种不同类型的机器人作性能测试时,测定出每个机器人连续攀登1米,2米,…,k米所用的时间。现在要对这n个机器人进行综合性能测试,举行机器人接力攀登演习。攀登的总高度为 m米。规定每个机器人只能攀登 1次或者不攀登,每次至少攀登1米,最多攀登k 米,而且每个机器人攀登的高度必须是整数,即只能在整米处接力。安排每个机器人攀登适当的高度,使完成接力攀登用的时间最短。
编程任务:给定 n 个登山机器人接力攀登的总高度m,以及每个机器人连续攀登 1 米,2 米,…,k米所用的时间,编程计算最优攀登方案。
【输入数据】
第一行是正整数n(1≤n≤1000),k(1≤k≤400)和 m(1≤m≤5000)分别表示机器人的个数,每个机器人最多可以攀登的高度,和攀登的总高度。接下来的 n行中,每行有 k个正整数,分别表示机器人连续攀登1米,2米,…,k 米所用的时间。
【输出数据】
最短攀登时间。
【样例输入】robot.in
5 10 25
24 49 75 102 130 160 192 230 270 320
23 48 75 103 139 181 224 274 344 415
22 49 80 180 280 380 480 580 680 780
25 51 80 120 170 220 270 320 370 420
23 49 79 118 158 200 250 300 350 400
【样例输出】robot.out
727
20分的迷之DP。
#include<cstdio>#include<string>using namespace std;#define MAXN 1010#define MAXK 410#define oo 999999999 int n,k,m,ro[MAXN][MAXK],f[MAXN][MAXN]; int main(){ freopen("robot.in","r",stdin); freopen("robot.out","w",stdout); scanf("%d%d%d",&n,&k,&m); int i,j; for(i=1;i<=n;i++) for(j=1;j<=k;j++) scanf("%d",&ro[i][j]); memset(f,63,sizeof(f)); f[0][0]=0; for(i=1;i<=n;i++)//枚举第i个机器人 for(j=1;j<=m;j++)//枚举高度 for(int h=1;h<=k;h++)//枚举每个机器人能走的高度 if(j-h>=0) f[i][j]<?=f[i-1][j-h]+ro[i][h]; printf("%d",f[n][m]); return 0;}
100‘
#include<cstdio>#include<algorithm>#include<cstring>#define inf 0x3f3f3f3fusing namespace std;int n,k,h[10000],ans=inf,vis[10000],rec[10000];struct Prog{int progs,progt,t;}p[10000];bool cmp(Prog a,Prog b){if(a.progs==b.progs)return a.progt < b.progt;return a.progs<b.progs;}int dfs(int t){if(vis[t])return rec[t];if(!h[t]){if(t<n)dfs(t+1);elsereturn 0;}else{int m,r=inf;for(int i=1;i<=k;i++)if(p[i].progs==t){m=i;break;}while(p[m].progs==t){r=min(r,p[m].t+dfs(p[m].progt+1));m++;}vis[t]=1;rec[t]=r;return r;}}int main(){freopen("sche.in","r",stdin);freopen("sche.out","w",stdout);scanf("%d%d",&n,&k);for(int i=1;i<=k;i++){scanf("%d%d",&p[i].progs,&p[i].t);p[i].progt=p[i].progs+p[i].t-1;h[p[i].progs]=1;}sort(p+1,p+1+k,cmp);ans=dfs(1);printf("%d",ans);return 0;}优先队列写法:
#include<cstdio>#include<iostream>#include<queue>using namespace std;typedef pair<int,int>pii;const int Maxn = 1005,Maxk = 405;int v[Maxn][Maxk];int use[Maxn];priority_queue<pii,vector<pii>,greater<pii> >q;#define MK(a,b) make_pair(a,b)#define Pf p.first#define Ps p.secondint main(){freopen("robot.in","r",stdin);freopen("robot.out","w",stdout);int n,k,m;scanf("%d%d%d",&n,&k,&m);for(int i = 1;i <= n;++i){for(int j = 1;j <= k;++j)scanf("%d",v[i] + j);}for(int i = 1;i <= n;++i){q.push(MK(v[i][1],i));use[i] = 1;}int ans(0),rk;pii p;for(int i = 1;i <= m;++i){p = q.top();q.pop();ans+=Pf;rk = use[Ps];if(rk < k)q.push(MK(v[Ps][rk+1] - v[Ps][rk],Ps));++use[Ps];}printf("%d",ans);return 0;}
- MZ test17# NOIP模拟题 #T3 第3 题 登山机器人(robot.pas/cpp)
- MZ test17# NOIP模拟题 # T2 第2题 最优时间表(sche.pas/cpp) [key.DP]
- MZ test17# NOIP模拟题 # T4 第4题 路线统计(route.cpp/pas)[key:矩阵]
- MZ test17# NOIP模拟题 # T1 第1题 时间计算(heaven.pas/cpp)[key.模拟]
- 【动规递推】登山机器人 robot
- 【NOIP 模拟题】[T3] 约会(lca)
- 【NOIP模拟题】T3 【递归】【复杂公式】【模拟】
- jzoj 1730. 【10.5NOIP普及模拟】sort(sort.pas/cpp)
- jzoj 1731. 【10.5NOIP普及模拟】sum(sum.pas/cpp)
- 【NOIP 模拟题】[T3]三角形(差分+乱搞)
- noip模拟11.3 T3
- 【20160904】NOIP模拟赛T3
- NOIP模拟赛 t3 nan
- [NOIP模拟]T3:系列维护
- 【NOIP模拟】 (10.24) T3 math
- noip 2017 模拟 D1 T3
- 【NOIP模拟】 (10.31) T3 纸带
- 【模拟】第一题 分数化小数(fracdec.pas/c/cpp)
- JVM虚拟机类加载机制
- hmailserver和rounduce安装
- Symbain同时支持C++开发和Java开发
- 深入理解Java虚拟机——HotSpot虚拟机对象探秘
- nginx的安装及使用
- MZ test17# NOIP模拟题 #T3 第3 题 登山机器人(robot.pas/cpp)
- 《Python基础教程》(二)列表和元组
- 关于自动化测试的一些思考
- JAVA设计模式(02):创建型-抽象工厂模式(Abstract Factory)
- 架构
- 数据挖掘—LDA,PCA特征提取降维与SVM多分类在人脸识别中的应用-数据集ORL
- auto_ptr
- javascript学习——继承
- UNIX网络编程之管道与FIFO