题意:题目是说从0到n-1,我还是习惯从1到n,所以以下我都这么写,大概题意就是(i, j)==‘Y’表示可以从i颜色变成j颜色,然后问我们最少删除几个会影响结果的‘Y’,能到n这个颜色;

没有意义的‘Y’:因为题目说了,能变色就一定得变色,而且,每次变色都得变成当前能变的颜色最小的那个,所有有可能执行了某些变色操作会导致变不成n,比如n==4,(1,2)==‘Y’;(3,4)==‘Y’;

那么会先变成2,然后就没得变了;

解题思路:

#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<cstring>
#define maxn 10005
#define inf 0x3f3f3f3f
using namespace std;
struct node
{
int num;
int dist;
node(int _num=0,int _dist=0):num(_num),dist(_dist){}
friend bool operator<(node a,node b)
{
return a.dist>b.dist;
}
};
struct Edge
{
int next;
int to;
int w;
}edge[maxn];
int head[maxn];
int dist[maxn];
int cnt;
int visit[maxn];
void add(int u,int v,int w)
{
edge[cnt].next=head[u];
edge[cnt].w=w;
edge[cnt].to=v;
head[u]=cnt++;
}
void dij(int x)
{
priority_queue<node>que;
memset(dist,0x3f3f3f3f,sizeof(dist));
memset(visit,0,sizeof(visit));
dist[x]=0;
que.push(node(x,0));
while(!que.empty())
{
node u=que.top();
que.pop();
int now=u.num;
for(int i=head[now];i!=-1;i=edge[i].next)
{
Edge e=edge[i];
if(dist[e.to]>dist[now]+e.w)
{
dist[e.to]=dist[now]+e.w;
que.push(node(e.to,dist[e.to]));
}
}
}
}
int main()
{
char s[60][60];
int t;
int n;
cin>>t;
while(t--)
{
cin>>n;
memset(head,-1,sizeof(head));cnt=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>s[i][j];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int cnt=0;
if(s[i][j]=='Y')
{
for(int k=1;k<=j-1;k++)
{
if(s[i][k]=='Y')
cnt++;
}
add(i,j,cnt);
} }
}
dij(1);
if(dist[n]==inf)
cout<<"-1\n";
else
cout<<dist[n]<<endl;
}
return 0;
}

  

根据先变小的这个操作,所以,我们可以这么建图,(i,j)==‘Y’时,可以建一条从i到j的边,权值为第i行开始从[1,j-1]中‘Y'的数量,因为如果我们要用这条边的话,因为先变小,所以我们得把这一行中比当前小的都删去,删掉一个权值加1;

代码:

51nod-1445-变色DNA(最短路)的更多相关文章

  1. 51nod 1445 变色DNA(dij)

    题目链接:51nod 1445 变色DNA 看了相关讨论再去用最短路:val[i][j]之间如果是'Y',说明i可以到达j,并且i到达j的代价是i那行 1到j-1 里面'Y'的数量. 最后,求 0到n ...

  2. 51NOD 1445 变色DNA

    1445 变色DNA 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1,2...N-1.研究发现这只狼的基因中存在一个变色矩阵,记为colormap,如果 ...

  3. 51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)

    1445 变色DNA 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有一只特别的狼,它在每个夜晚会进行变色,研究发现它可以变成N种颜色之一,将这些颜色标号为0,1 ...

  4. 51nod 1445 变色DNA(最短路变形)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1445 题意: 思路: 挺好的一道题目,如果$colormap[i][j] ...

  5. 51nod 1445:变色DNA 最短路变形

    1445 变色DNA 题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有一只特别的狼,它在每个夜晚会进行变色,研究发现 ...

  6. 51nod_1445 变色DNA 最短路模板 奇妙思维

    这是一道最短路模板题,但是在理解题意和提出模型的阶段比较考验思维,很容易想到并且深深进入暴力拆解题目的无底洞当中. 题意是说:给出一个邻接矩阵,在每个点时,走且仅走向,合法路径中编号最小的点.问题是是 ...

  7. 变色DNA(最短路思维题)

    个人心得:太水了,还是对最短路不太深入了解,无法构建出最短路模板,然后就是读题能力, 这题的关键在于转换为最短路模板,因为DFS我在24组超时了. 假设把从i到j的代价看做是权值,那么就是对权值的确立 ...

  8. 51nod 1624 取余最短路(set)

    题意: 佳佳有一个n*m的带权矩阵,她想从(1,1)出发走到(n,m)且只能往右往下移动,她能得到的娱乐值为所经过的位置的权的总和. 有一天,她被下了恶毒的诅咒,这个诅咒的作用是将她的娱乐值变为对p取 ...

  9. 51Nod 迷宫问题(最短路+权值)(模板)

    你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数.还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间.游戏规定了 ...

  10. 【ACM】那些年,我们挖(WA)过的最短路

    不定时更新博客,该博客仅仅是一篇关于最短路的题集,题目顺序随机. 算法思想什么的,我就随便说(复)说(制)咯: Dijkstra算法:以起始点为中心向外层层扩展,直到扩展到终点为止.有贪心的意思. 大 ...

随机推荐

  1. ffmpeg源码安装

    官网下载地址 http://www.ffmpeg.org/download.html https://sourceforge.net/projects/opencore-amr/ 参考资料:官网及以下 ...

  2. zookeeper-如何修改源码-《每日五分钟搞定大数据》

    本篇文章仅仅是起一个抛砖迎玉的作用,举一个如何修改源码的例子.文章的灵感来自 ZOOKEEPER-2784. 提一个问题先 之前的文章讲过zxid的设计,我们先复习下: zxid有64位,分成两部分: ...

  3. C#里面滥用String造成的性能问题

    前两天给我们的json写一个解析函数, 之前用的正宗的json parser, 支持完整的json特性. 但是实际上我们用到特性, 只有key-value的映射, value的类型只有数字和字符串两种 ...

  4. super关键字访问父类成员

    1.super只能出现在子类的方法和构造方法中: 2.super调用构造方法时只能是第一句: 3.super不能访问父类的private成员.

  5. codeforces#687 B. Remainders Game

    题意:给出n个数,和一个数p,问你在知道 x%ai  的情况下,能不能确定x%p的值 结论:当n个数的最小公倍数是p的倍数时,可以确定 代码: #include <bits/stdc++.h&g ...

  6. 关于XLL加载项动态加载、卸载的演示及XLL函数自定义类型注册的演示

    1.在XLL中,把函数定义成不同的类型,在Excel中的实际效果也不同,具体如下: pxMacroType value                                          ...

  7. Day15 Python基础之logging模块(十三)

    参考源:http://www.cnblogs.com/yuanchenqi/articles/5732581.html logging模块 (****重点***) 一 (简单应用) import lo ...

  8. scrapy之五大核心组件

    scrapy之五大核心组件 scrapy一共有五大核心组件,分别为引擎.下载器.调度器.spider(爬虫文件).管道. 爬虫文件的作用: a. 解析数据 b. 发请求 调度器: a. 队列 队列是一 ...

  9. 我的集合学习笔记--ArrayList

    一,ArrayList 实现自己的ArrayList:主要是添加方法,理解自动扩容机制 代码+注释 package com.amazing.jdk.learn2List.list_08_13; /** ...

  10. Ubuntu Linux Recovery Mode

    在安全模式/修復模式有以下的選項︰resume Resume normal boot繼續正常啟動作業,供不小心誤入此選單的使用者開機使用.(继续以正常模式启动) clean Try to make f ...