题目背景

XS中学的校长积劳成疾,最终由于无聊而卧病在沙发。需要药(pi)水(gu)拯救他的生活。

题目描述

现在有n种药水,编号分别为1..n,能拯救校长的药水编号为n

每个药水都可以购买到,但有的价格很便宜,有的很贵。

你还知道m种神奇的合成方法,可以将某些不同的药水合成成为一个新的药水。

现在,你需要求出合成出n号药水所需要花费的最小金钱,以及在保证花费最小情况下的最少需要合成的次数。

输入输出格式

输入格式:

第一行两个数n,m

接下来n行,每行有一个数a[i],表示i号药水的价格。

接下来m行,每行描述一个合成方法。

对于每个合成方法:第一个数x表示所需要的药水的个数。接下来x个数,分别表示所需要的每个药水的编号,最后一个数表示这x个药水所合成的药水的编号

输出格式:

仅两个数,分别表示最小花费和满足该花费的最小合成次数,中间用空格隔开。

输入输出样例

输入样例#1:

10 4
1
2
3
100
4
2
2
2
100
100
3 1 2 3 4
2 4 5 10
2 6 7 9
2 9 8 4
输出样例#1:

10 2

说明

n<=1000

m<=10000

2<=x<=10

Tips:看标签!!!

/*
对于每种药,统计一个mon代表最小花费,step代表在mon基础上的最小步数, 不断用能合成i这种药的Σmon[j] 来更新mon[i],共更新n次就可以,最后求 mon[n]。
*/
#include<cstdio>
#include<iostream>
#define N 1010
#define M 10010
using namespace std;
int mon[N],step[N],n,m;
struct node
{
int tot,s[],t;
};node a[M];
int read()
{
char c=getchar();int num=,flag=;
while(c<''||c>''){if(c=='-')flag=-;c=getchar();}
while(c>=''&&c<=''){num=num*+c-'';c=getchar();}
return num*flag;
}
int main()
{
n=read();m=read();
for(int i=;i<=n;i++)
mon[i]=read();
for(int i=;i<=m;i++)
{
a[i].tot=read();
for(int j=;j<=a[i].tot;j++)
a[i].s[j]=read();
a[i].t=read();
}
for(int t=;t<=n;t++)
{
int flag=;
for(int i=;i<=m;i++)
{
int sum=,maxn=;
for(int j=;j<=a[i].tot;j++)
sum+=mon[a[i].s[j]],maxn+=step[a[i].s[j]];
if(sum<mon[a[i].t])
{
step[a[i].t]=maxn+;
mon[a[i].t]=sum;
flag=;
}
if(sum==mon[a[i].t]&&maxn+<step[a[i].t])
step[a[i].t]==maxn+,flag=;
}
if(!flag)break;
}
printf("%d %d",mon[n],step[n]);
return ;
}

救命(洛谷 U4525)的更多相关文章

  1. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  2. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  3. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  4. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  5. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  6. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  7. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  8. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

  9. 洛谷 P1379 八数码难题 Label:判重&&bfs

    特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...

随机推荐

  1. java 实现word文档在线预览

    一.准备工具 1.通过第三方工具openoffice,将word.excel.ppt.txt等文件转换为pdf文件 下载地址:http://www.openoffice.org/download/in ...

  2. Sql 主键设置

    1.开发数据库时常用命名规范 1>.使用不包含数字的单数表名,如果必要的话可以增加模块名前缀. 2>.对于主键的命名,使用表名+ID的形式. 3>.作为外键的列的名字应该与它们所对应 ...

  3. c++ gets函数

    函数名称:gets函数 函数结构:gets() 所需头文件:#include<cstdio> 函数作用:持续读入,直到遇到换行停止输出.

  4. js执行顺序——学习笔记

    我们知道有个全局的 window对象,js的一切皆window上的属性和方法.window上有个window.document属性,记录了整个html的dom树,document是顶层. body 和 ...

  5. 实例化Class类的5种方式

    Java的数据类型可以分为两类,即引用类型和原始类型.对于每种类型的对象,Java虚拟机会实例化不可变的java.lang. Class对象.它提供了在运行时检查对象属性的方法,这些属性包括它的成员和 ...

  6. Linux系统资源监控--linux命令、nmon和spotlight

    前言: 系统资源监控一般监控系统的CPU,内存,磁盘和网络.系统分为windows和Linux.本篇主要记录Linux. Linux系统资源监控常用命令及工具 一.常用命令:top.free.iost ...

  7. jboss 配置虚拟路径

    1.找到jboss服务器下server.xml文件.我用的是web用户,所以在web用户下找 路径:G:\skWorkspace\Jboss\server\web\deploy\jbossweb.sa ...

  8. RabbitMQ调用

    添加 gradle依赖complie("com.rabbitmq:amqp-client:5.0.0") Hello, World Working Queues Publish/S ...

  9. context switch

    In computing, a context switch is the process of storing and restoring the state (more specifically, ...

  10. Xamarin View获取属性的绑定信息

    public static Binding GetBinding( BindableObject self, BindableProperty property) { var methodInfo = ...