nyoj203(迪杰斯特拉+01背包)
三国志
- 描述
-
《三国志》是一款很经典的经营策略类游戏。我们的小白同学是这款游戏的忠实玩家。现在他把游戏简化一下,地图上只有他一方势力,现在他只有一个城池,而他周边有一些无人占的空城,但是这些空城中有很多不同数量的同种财宝。我们的小白同学虎视眈眈的看着这些城池中的财宝。
按照游戏的规则,他只要指派一名武将攻占这座城池,里面的财宝就归他所有了。不过一量攻占这座城池,我们的武将就要留守,不能撤回。因为我们的小白手下有无数的武将,所以他不在乎这些。
从小白的城池派出的武将,每走一公理的距离就要消耗一石的粮食,而他手上的粮食是有限的。现在小白统计出了地图上城池间的道路,这些道路都是双向的,他想请你帮忙计算出他能得到 的最多的财宝数量。我们用城池的编号代表城池,规定小白所在的城池为0号城池,其他的城池从1号开始计数。
- 输入
-
本题包含多组数据:
首先,是一个整数T(1<=T<=20),代表数据的组数
然后,下面是T组测试数据。对于每组数据包含三行:
第一行:三个数字S,N,M
(1<=S<=1000000,1<=N<=100,1<=M<=10000)
S代表他手中的粮食(石),N代表城池个数,M代表道路条数。
第二行:包含M个三元组行 Ai,Bi,Ci(1<=A,B<=N,1<=C<=100)。
代表Ai,Bi两城池间的道路长度为Ci(公里)。
第三行:包含N个元素,Vi代表第i个城池中的财宝数量。(1<=V<=100) - 输出
- 每组输出各占一行,输出仅一个整数,表示小白能得到的最大财富值。
- 样例输入
-
2 10 1 1 0 1 3 2 5 2 3 0 1 2 0 2 4 1 2 1 2 3
- 样例输出
-
2 5
-
-
解题思路:这道题目比较容易懂,弄清楚题意后就应该有思路。。注意题目有重边,要取最小的。。
-
#include<iostream> #include<cstdio> #include<cstring> using namespace std;const int inf = 65535; int s,n,m,map[110][110]; int dis[110],dp[1000010],num[110];void dijkstra() {int k,minn = inf;bool vis[110];memset(vis,false,sizeof(vis)); /* for(int i = 1; i <= n; i++){dis[i] = map[0][i];if(dis[i] < minn){minn = dis[i];k = i;}}vis[k] = true;for(int j = 1; j <= n; j++){if(vis[j] == true) continue;if(dis[j] > minn + map[k][j])dis[j] = minn + map[k][j];}*/for(int i = 1; i <= n; i++) dis[i] = map[0][i];for(int i = 1; i <= n; i++){minn = inf;for(int j = 1; j <= n; j++){if(vis[j] == true) continue;if(minn > dis[j]){minn = dis[j];k = j;}}vis[k] = true;for(int j = 1; j <= n; j++){if(vis[j] == true) continue;if(dis[j] > minn + map[k][j])dis[j] = minn + map[k][j];}} }int main() { int t;scanf("%d",&t);while(t--){scanf("%d%d%d",&s,&n,&m);for(int i = 0; i <= n; i++)for(int j = 0; j <= n; j++)map[i][j] = inf;for(int i = 1; i <= m; i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);map[a][b] = min(map[a][b],c);map[b][a] = map[a][b];}for(int i = 1; i <= n; i++)scanf("%d",&num[i]);dijkstra(); //寻求最短路//典型的01背包问题memset(dp,0,sizeof(dp));for(int i = 1; i <= n; i++)for(int j = s; j >= dis[i]; j--){dp[j] = max(dp[j],dp[j-dis[i]]+num[i]);}printf("%d\n",dp[s]);}return 0; }
nyoj203(迪杰斯特拉+01背包)相关推荐
- LeetCode 第 59 场力扣夜喵双周赛(最短路径数+迪杰斯特拉、动态规划+最长公共前缀问题) / 第255场周赛(二进制转换,分组背包,子集还原数组(脑筋急转弯))
第 59 场力扣夜喵双周赛 两道400多五百,后两道都写出代码来了,但是都有问题,哭辽- 还有刚开始第一道测试好慢,搞心态了 5834. 使用特殊打字机键入单词的最少时间 有一个特殊打字机,它由一个 ...
- 大话数据结构-迪杰斯特拉算法(Dijkstra)和弗洛伊德算法(Floyd)
6 最短路径 最短路径,对于图来说,是两顶点之间经过的边数最少的路径:对于网来说,是指两顶点之间经过的边上权值之和最小的路径.路径上第一个顶点为源点,最后一个顶点是终点. 6.1 迪杰斯特拉(Di ...
- floyd和迪杰斯特拉算法的路径记录方法。
先说迪杰斯特拉,先看题目吧. 题目1 这题就是迪杰斯特拉的路径记录算法题啊,还记录了最小路径个数. 代码如下 #include<iostream> #include<cstdio&g ...
- ccf 交通规划(迪杰斯特拉优先队列模板)
什么跟什么就是刘汝佳小白书迪杰斯特拉队列的优先队列法 #include<bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f ...
- usaco Sweet Butter(迪杰斯特拉(优先队列优化),bellman_ford算法模板)
这题开始用没有优化的迪杰斯特拉喜闻乐见的超时了,然后我用bellmanford算法按理说时间复杂度更大但是书上说往往只要很短的时间就可以求出最短路. 所以我用了这个算法但是我对这个算法还是不熟套了模板 ...
- 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)
目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...
- 迪杰斯特拉算法(C语言实现)
迪杰斯特拉算法(C语言实现) 如上图,求以a为源点到个顶点的最短路劲. #include "stdio.h" #include "stdlib.h" //用一个 ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- 迪杰斯特拉算法——PAT 1003
本文主要是将我对于我对于迪杰斯特拉算法的理解写出来,同时通过例题来希望能够加深对于算法的理解,其中有错误的地方希望大家指正. 迪杰斯特拉算法 我将这个算法理解成一个局部到整体的算法,这个方法确实越研究 ...
最新文章
- [亿能测试_www.gdtesting.com]测试技术资料网盘共享
- 客户关系管理系统CRM(Customer Relationship Management)
- shiro放行_Shiro框架详解 tagline
- 2015年07月04日
- 金华职业技术学院计算机应用技术分数线,金华职业技术学院录取分数线2021是多少分(附历年录取分数线)...
- 查找链表中倒数第k个结点(C++)
- 加快linux编译速度,Linux Makefile 编译速度的优化【转】
- UVA10474 Where is the Marble?【排序】
- vue+axios 前端实现登录拦截(路由拦截、http拦截)
- 超 短 高精度 bign 模板
- Java 后端开发工程师进阶路线
- 软件工程第二篇博客(“相等”)
- 程序员音乐_预订音乐会的程序员指南
- 基于Android studio开发的图灵智能聊天机器人
- linux下mariadb的服务启动异常,centos7 – CentOS 7 MariaDB错误“无法启动mariadb.service:找不到单位.”...
- sel4白皮书翻译 | sel4 whitepaper | sel4简介
- Linux基础知识详解
- 火车票飞机票,点击切换按钮切换出发城市和到达城市
- Shell read命令详解
- UVALive 6555 Playing Fair with Cryptography(细节处理)
热门文章
- 最新发布丨游戏市场“超预期”增长背景下,如何加速产品精品化 运营精细化?...
- 神策数据多少含金量?PICOOC 有品帮你智能称量
- SpringBoot集成Mybatis(0配置注解版)
- 一句代码实现 HTML5 语音搜索
- 使用C语言中的宏来定位出错信息
- 解决ntp的错误 no server suitable for synchronization found
- HTML5 Canvas 绘制旋转45度佛教万字
- 黑马day14 过滤器概述amp;生命周期amp;运行过程
- C++之string类
- ant 编译android工程(转)