题目描述

某地临时居民想获得长期居住权就必须申请拿到红牌。获得红牌的过程是相当复杂 ,一共包括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. Spring MVC自定义403,404,500状态码返回页面

    代码 HTTP状态码干货:http://tool.oschina.net/commons?type=5 import org.springframework.boot.web.servlet.erro ...

  2. VS2017开发的IDE扩展

    Tag Helpers 智能提示 Razor Language Services: https://marketplace.visualstudio.com/items?itemName=ms-mad ...

  3. 《React Native 精解与实战》书籍连载「React 与 React Native 简介」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  4. Flask发送邮件

    参考:官方文档:https://pythonhosted.org/Flask-Mail/ 1.安装插件  Flask-Mail (pip install Flask-Mail) 2.配置 Flask- ...

  5. portscaner 多线程、多协程并发端口扫描

    import socket,time,re,sys,os,threading import gevent from gevent import monkey monkey.patch_all() so ...

  6. MySQL复制表的方式以及原理和流程

    复制表的俩种方式: 第一.只复制表结构到新表 create table 新表 select * from 旧表 where 1=2 或者 create table 新表 like 旧表 第二.复制表结 ...

  7. Solrcloud(Solr集群)

    Solrcloud(Solr集群) Solrcloud介绍: SolrCloud(solr集群)是Solr提供的分布式搜索方案. 当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud. ...

  8. Liunx 简单的命令说明

    cd命令在linux中用来切换或者进入目录,路径还分为相对路径和绝对路径 cd 命令:切换当前目录至其他目录 cd /:加上斜杠表示是进入到根目录. pwd命令:查看当前路径. ()cd 进入用户主目 ...

  9. Cannot connect to database because the database client

    问题描述: arcgis server10.1  arcgis sde10出现下面问题 Cannot connect to  database because the database client ...

  10. laravel自定义门面

    https://learnku.com/articles/19195   关于laravel门面和服务提供者使用的一点见解,门面之词,不足之处,还请多多指教. 在laravel中,我们可能需要用到自己 ...