题目描述

某地临时居民想获得长期居住权就必须申请拿到红牌。获得红牌的过程是相当复杂 ,一共包括NN个步骤。每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件。为了加快进程,每一步政府都派了MM个工作人员来检查材料。不幸的是,并不是每一个工作人员效率都很高。尽管如此,为了体现“公开政府”的政策,政府部门把每一个工作人员的处理一个申请所花天数都对外界公开。

为了防止所有申请人都到效率高的工作人员去申请。这M \times NM×N个工作人员被分成MM个小组。每一组在每一步都有一个工作人员。申请人可以选择任意一个小组也可以更换小组。但是更换小组是很严格的,一定要相邻两个步骤之间来更换,而不能在某一步骤已经开始但还没结束的时候提出更换,并且也只能从原来的小组I更换到小组I+1I+1,当然从小组MM可以更换到小组11。对更换小组的次数没有限制。

例如:下面是33个小组,每个小组44个步骤工作天数:

小组11 : 2, 6 ,1 ,82,6,1,8

小组22 : 3,6, 2, 63,6,2,6

小组33 : 4, 2 ,3 ,64,2,3,6

例子中,可以选择小组11来完成整个过程一共花了2+6+1+8=172+6+1+8=17天,也可以从小组22开始第一步,然后第二步更换到小组3,第三步到小组11,第四步再到小组22,这样一共花了3+2+1+6=123+2+1+6=12天。你可以发现没有比这样效率更高的选择。

你的任务是求出完成申请所花最少天数。

输入输出格式

输入格式:

第一行是两个正整数NN和MM,表示步数和小组数。接下来有MM行,每行NN个非负整数,第i+1(1 \le i \le M)i+1(1≤i≤M)行的第j个数表示小组ii完成第j步所花的天数,天数都不超过10000001000000。

输出格式:

一个正整数,为完成所有步所需最少天数。。

输入输出样例

输入样例#1:

4 3
2 6 1 8
3 6 2 6
4 2 3 6
输出样例#1:

12

说明

【数据规模与约定】

对于100\%100%的数据,有N ≤ 2000, M ≤ 2000N≤2000,M≤2000。


这道题和数字三角形思路是一样的,只不过倒了过来再加上一个特判

先是正向推:

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
int n,m,mini=; int xz[][],dp[][];
using namespace std;
int main()
{
cin>>n>>m;//n 步数 m 小组数
for(int i=;i<=m;i++)
{
for(int j=;j<=n;j++)
{
cin>>xz[i][j];
}
}
for(int i=;i<=m;i++)
{
dp[i][]=xz[i][];
}
    
for(int j=;j<=n;j++)//这里是先循环j,可以对照上面的输入样例看
{
for(int i=;i<=m;i++)
{
if(i==)
{
dp[i][j]=min(dp[i][j-],dp[m][j-])+xz[i][j];
}
else
dp[i][j]=min(dp[i][j-],dp[i-][j-])+xz[i][j];
}
} for(int i=;i<=m;i++)
{
mini=min(mini,dp[i][n]);//从最后一行寻找最小的输出
}
cout<<mini;
}

反向抽烟操作来一波

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <iomanip>
using namespace std;
int n,m,a[][],ans=<<;//ans必须要定大,不然找不到最小值
int main(){
scanf ("%d%d",&n,&m);
for (int i=;i<m;i++)
for (int j=;j<n;j++)scanf ("%d",&a[i][j]);
for (int j=n-;j>=;j--)//从倒数第2步开始,向第一步推进
//我用的是0下标
for (int i=;i<m;i++)
a[i][j]=min(a[(i+)%m][j+],a[i][j+])+a[i][j];//取最小值,更新为之后的步骤的最小值
for (int i=;i<m;i++)ans=min(ans,a[i][]);//找答案
printf ("%d",ans);//结束
return ;
}

这个题用我发的数字三角形的贪心做也可以,这里不再赘述

P1130 红牌的更多相关文章

  1. 洛谷 P1130 红牌

    P1130 红牌 题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括N个步骤.每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件.为了加快进程 ...

  2. P1130 红牌(动态规划)

    P1130 红牌 思路如下 这一题很像数字金字塔,我们可以正着求最小时间,当然也可以逆着求最小时间, 如果正着求:那么我们怎么求状态转移方程呢?,在这里我们假定状态转移方程为:dp[ i ][ j ] ...

  3. 洛谷P1130 红牌

    题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括N个步骤.每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件.为了加快进程,每一步政府都派了 ...

  4. 洛谷——P1130 红牌

    题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括N个步骤.每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件.为了加快进程,每一步政府都派了 ...

  5. 洛谷P1130红牌(简单DP)

    题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括NNN个步骤.每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件.为了加快进程,每一步政府都 ...

  6. 题解 P1130 【红牌】

    逆推dp经典题目:数字三角形的折叠版 为什么这么说? 因为我们会发现:除了每一次都特判一下是否转换行号以外,剩下的思想没什么不同. 没看题目的看这里 先定义: n,m是步骤数目,小组数目 work[i ...

  7. Luogu【P1130】红牌(DP)

    欧拉 本蒟蒻第一个自己想出来的DP题 请移步题目链接 调了半天.i从1到n,j从1到m. f[i][j]表示的是第i道工序在第j个小组办完所花的最短时间. 因为要用到上一个状态,而上一个状态要么是同一 ...

  8. 【u120】红牌

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括N个步骤.每一步骤 ...

  9. [luoguP1130] 红牌(DP)

    传送门 幼儿园DP. ——代码 #include <cstdio> #include <iostream> ; << ); int a[MAXN][MAXN], f ...

随机推荐

  1. 【C#复习总结】细说泛型委托

    1 前言 本系列会将[委托] [匿名方法][Lambda表达式] [泛型委托] [表达式树] [事件]等基础知识总结一下.(本人小白一枚,有错误的地方希望大佬指正) 系类1:细说委托 系类2:细说匿名 ...

  2. jdk1.8之线程中断

    在Core Java中有这样一句话:"没有任何语言方面的需求要求一个被中断的程序应该终止.中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应对中断 " 线程中断不会使线 ...

  3. 跨界 - Omi 发布多端统一框架 Omip 打通小程序与 Web

    Omip 今天,Omi 不仅仅可以开发桌面 Web.移动 H5,还可以直接开发小程序!直接开发小程序!直接开发小程序! Github Omi 简介 Omi 框架是微信支付线研发部研发的下一代前端框架, ...

  4. VirtualBox安装复制Centos6.6配置网络

    由于要搭建mongodb的集群,先用虚拟机做下相关实验,以前都用VM Vare,但是现在这个电脑的配置不是太好,VM Vare比较耗资源,所以选择VirtualBox. 1.下载VirtualBox和 ...

  5. Leetcode 101. Symmetric Tree(easy)

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  6. 牛客网 Python 编程输入规范

    import sys try: while True: line = sys.stdin.readline().strip() if line == '': break lines = line.sp ...

  7. H5 14-后代选择器和子元素选择器

    14-后代选择器和子元素选择器 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  8. 通过this()调用有参构造方法

    使用原因:在通过无参构造方法实例化对象时,如果有属性可以设置默认值,可通过在无参构造方法中使用this()调用有参构造方法实现. this()需要写在无参构造方法的第一行! 例子:在没有给出小猫的名字 ...

  9. Imbalanced Array CodeForces - 817D (思维+单调栈)

    You are given an array a consisting of n elements. The imbalance value of some subsegment of this ar ...

  10. 容器化-Docker介绍

    导读:本文章对Docker技术进行了介绍,阐述了Docker的技术发展历程.容器与虚拟机的差异.Docker原理.特点.Docker三组件和Docker带来的影响,为我们进一步理解Docker打下基础 ...