acm.njupt--1859
来源:互联网 发布:mac口红 see sheer 编辑:程序博客网 时间:2024/05/22 01:07
越野赛
时间限制(普通/Java):5000MS/15000MS 运行内存限制:65536KByte
总提交:36 测试通过:12
总提交:36 测试通过:12
描述
大戈壁越野赛前后分为很多赛段,一个车队也有多辆车。一个车队在一个赛段只能使用一辆车,但是到达赛段中转站(分隔各赛段的点)时可以任意更换车辆,当然也可以不换。在不同赛段,不同的车有着不同的表现,如果规则不限定换车次数,显然可以在每一个赛段都用最好用的车,但很不幸,换车次数有限定,那么,安排一个合理的换车策略十分重要。我们认为,车队可以选择任意一种车开始赛程,不算换车次数。
现在依次给出从起点到终点N个赛段中每辆车的表现(跑完当前赛段所需时间),请计算出跑完全部赛程所需最短时间。
输入
第一行包含三个正整数N、M、Q,分别表示赛段数、车队用车种类、最大更换车辆次数限制(1≤N≤10000,1≤M≤10,1≤Q≤100)。
接下来M行,每行N个正整数。第i行第j个数表示i号车在第j赛段的表现(这辆车跑完这个赛段所需时间),每个赛段的时间上限保证不超过1000。
输出
输出一行,包含一个整数,表示车队在规则限定内的赛程最短完成时间
样例输入
3 2 1
1 4 1
2 2 3
样例输出
5
动态规划算法.
F[i][k][j]表示前i个赛道,换了k次,最后一次使用的是车j,所能达到的最快速度.
A[i][j]存储第i个赛道,第j量车的时间.
那么,要么前一次使用的也是车j,那么不算换车,得到:
或者,前一次使用的不是车j,而是车a(1<a<M),那么换车次数+1,得到:
那么最终的动态规划方程为:
注意点:
1.动态规划初始条件的设置.
2.用scanf与printf,用cin与cout会超时.
AC程序如下:
#include<iostream>using namespace std;#define maxn 10002#define maxm 12#define maxq 102#define MM 999999int f[maxn][maxq][maxm];int A[maxn][maxm];int main(){ int N,M,Q; scanf("%d%d%d",&N,&M,&Q); for(int i=1;i<=M;i++) { for(int j=1;j<=N;j++) { scanf("%d",&A[j][i]); } } for(int i=1;i<=N;i++) { f[i][0][0]=MM; } for(int j=0;j<=M;j++) { f[0][0][j]=MM; } for(int i=0;i<=N;i++) { for(int k=1;k<=Q;k++) { for(int j=0;j<=M;j++) f[i][k][j]=MM; } } for(int i=1;i<=N;i++) { for(int j=1;j<=M;j++) { f[0][0][j]=0; f[i][0][j]=f[i-1][0][j]+A[i][j]; } }for(int j=0;j<=M;j++) { f[0][0][j]=MM; } for(int i=2;i<=N;i++) { for(int k=1;k<=Q&&k<i;k++) { for(int j=1;j<=M;j++) { int maxx=99999999; for(int l=1;l<=M;l++) { if(l!=j&&maxx>f[i-1][k-1][l]) maxx=f[i-1][k-1][l]; } f[i][k][j]=min(f[i-1][k][j],maxx)+A[i][j]; } } } int maxx=99999999; for(int i=0;i<=Q;i++) { for(int j=1;j<=M;j++) { if(maxx>f[N][i][j]) maxx=f[N][i][j]; } } printf("%d\n",maxx); return 0;}
1 0
- acm.njupt--1859
- acm.njupt--1983
- acm.njupt--2026
- acm.njupt--2027
- acm.njupt--2008
- acm.njupt--1882
- NJUPT ACM 合法日期
- 字符串排序--acm.njupt
- 第几天--acm.njupt
- acm.njupt 1001-1026 简单题
- 数的计算——acm.njupt
- njupt 社团吞并
- njupt Keroro侵略地球
- njupt 1581 筷子 DP
- 筷子 - NJUPT 1851 dp
- From NJUPT to Oracle
- njupt-1134-Christmas
- njupt-胜负问题||
- apt-命令与dpkg命令汇总
- hibernate配置文件hibernate.cfg.xml的详细解释
- lua 最简单 网页抓取
- English_do
- web.xml配置文件详解
- acm.njupt--1859
- Struts2拦截器的使用 (详解)
- 【POJ】【P2446】【Chessboard】【题解】【二分图匹配】
- android初学------SlidingMenu(侧滑菜单的使用—)
- Structs2中配置文件详解
- 使用uIP将TUN网卡适配到TAP网卡-tun2tap
- 《高效学习OpenGL》 之 点块纹理 纹理矩阵堆栈 q坐标
- C#变量定义中类型后带一个问号
- kohana框架查询生成器