昂贵的聘礼
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 43523   Accepted: 12760

Description

年 轻的探险家来到了一个印第安部落里。在那里他和酋长的女儿相爱了,于是便向酋长去求亲。酋长要他用10000个金币作为聘礼才答应把女儿嫁给他。探险家拿 不出这么多金币,便请求酋长降低要求。酋长说:"嗯,如果你能够替我弄到大祭司的皮袄,我可以只要8000金币。如果你能够弄来他的水晶球,那么只要 5000金币就行了。"探险家就跑到大祭司那里,向他要求皮袄或水晶球,大祭司要他用金币来换,或者替他弄来其他的东西,他可以降低价格。探险家于是又跑 到其他地方,其他人也提出了类似的要求,或者直接用金币换,或者找到其他东西就可以降低价格。不过探险家没必要用多样东西去换一样东西,因为不会得到更低 的价格。探险家现在很需要你的帮忙,让他用最少的金币娶到自己的心上人。另外他要告诉你的是,在这个部落里,等级观念十分森严。地位差距超过一定限制的两 个人之间不会进行任何形式的直接接触,包括交易。他是一个外来人,所以可以不受这些限制。但是如果他和某个地位较低的人进行了交易,地位较高的的人不会再 和他交易,他们认为这样等于是间接接触,反过来也一样。因此你需要在考虑所有的情况以后给他提供一个最好的方案。
为了方便起见,我们把所有的物品从1开始进行编号,酋长的允诺也看作一个物品,并且编号总是1。每个物品都有对应的价格P,主人的地位等级L,以
及一系列的替代品Ti和该替代品所对应的"优惠"Vi。如果两人地位等级差距超过了M,就不能"间接交易"。你必须根据这些数据来计算出探险家最少需要多
少金币才能娶到酋长的女儿。

Input

输入第一行是两个
整数M,N(1 <= N <=
100),依次表示地位等级差距限制和物品的总数。接下来按照编号从小到大依次给出了N个物品的描述。每个物品的描述开头是三个非负整数P、L、X(X
< N),依次表示该物品的价格、主人的地位等级和替代品总数。接下来X行每行包括两个整数T和V,分别表示替代品的编号和"优惠价格"。

Output

输出最少需要的金币数。

Sample Input

1 4
10000 3 2
2 8000
3 5000
1000 2 1
4 200
3000 2 1
4 200
50 2 0

Sample Output

5250

分析:
需要注意几点:
  人物等级限制;
  存在内环,如果没有用剪枝(一旦当前金额大于存储值,则剪枝)的话,需要判断;
  记得设定初始值为酋长的price;
  存在只换东西,不需要加钱的情况;
结论:邻接矩阵+递归df。
待解决问题:真的是筋疲力竭了,所有discuss里的测试数据全部通过,奈何.....还是WA啊,为毛....
 #include <stdio.h>
#include <string.h> #define MAXNUM 105
#define MAX 65535 int gwLevelgap;
int gwMax;
int gwTotal = MAX;
int gawRouteMap[MAXNUM][MAXNUM];
int gawLevel[MAXNUM];
int gawPrice[MAXNUM];
int gawRecord[MAXNUM]; void GetInput()
{
int i = ;
int j = ;
int wPrice = ;
int wLevel = ;
int wExcNum = ;
int wNo = ;
int wRoutePrice = ;
scanf("%d %d", &gwLevelgap, &gwMax);
for(i=; i<gwMax; i++)
{
scanf("%d %d %d", &wPrice, &wLevel, &wExcNum);
gawLevel[i] = wLevel;
gawPrice[i] = wPrice;
for(j=; j<wExcNum; j++)
{
scanf("%d %d", &wNo, &wRoutePrice);
gawRouteMap[i][wNo-] = wRoutePrice;
}
}
} int CalcPrice(int j, int sum, int maxlevel, int minlevel)
{
int i = ;
int all0flag = ;
if(j > gwMax-)
return ;
if(gawRecord[j] == )
{
return ;
}
gawRecord[j] = ;
if(gawLevel[j] > maxlevel)
maxlevel = gawLevel[j];
if(gawLevel[j] < minlevel)
minlevel = gawLevel[j];
if(maxlevel - minlevel > gwLevelgap)
{
return ;
}
for(i=; i<gwMax; i++)
{
if(gawRouteMap[j][i] != -)
{
if( == CalcPrice(i, sum+gawRouteMap[j][i], maxlevel, minlevel))
if(sum + gawPrice[j] < gwTotal)
gwTotal = sum + gawPrice[j];
if(j == )
{
memset(gawRecord, , MAXNUM*sizeof(int));
gawRecord[j] = ;
}
all0flag = ;
}
}
if(all0flag == )
{
sum += gawPrice[j];
if(sum < gwTotal)
gwTotal = sum;
}
return ;
} int main(void)
{
memset(gawRouteMap, -, MAXNUM*MAXNUM*sizeof(int));
GetInput();
gwTotal = gawPrice[];
CalcPrice(, , gawLevel[], gawLevel[]);
printf("%d\n", gwTotal); return ;
}

测试数据:

1 3
10000 3 1
2 200
1000 2 2
1 100
3 400
50 2 0 650 1 5
10000 3 2
2 5000
3 5000
3000 4 1
4 400
3000 2 1
4 500
1000 3 1
5 100
100 2 0 5700 1 5
10000 3 2
2 5000
3 5000
3000 4 1
4 400
3000 2 1
4 500
1000 3 1
5 100
100 2 0 5700 1 5
10000 3 2
2 5000
3 5000
3000 2 1
4 500
3000 4 1
4 400
1000 3 1
5 100
100 2 0 5700 1 5
10000 3 1
2 1000
1000 2 2
3 400
4 500
1000 1 1
5 50
1000 2 1
5 100
50 2 0 1650 1 9
100 1 8
2 80
3 80
4 80
5 80
6 80
7 80
8 80
9 80
100 1 8
1 80
3 80
4 80
5 80
6 80
7 80
8 80
9 80
100 1 8
1 80
2 80
4 80
5 80
6 80
7 80
8 80
9 80
100 1 8
1 80
2 80
3 80
5 80
6 80
7 80
8 80
9 80
100 1 8
1 80
2 80
3 80
4 80
6 80
7 80
8 80
9 80
100 1 8
1 80
2 80
3 80
4 80
5 80
7 80
8 80
9 80
100 1 8
1 80
2 80
3 80
4 80
5 80
6 80
8 80
9 80
100 1 8
1 80
2 80
3 80
4 80
5 80
6 80
7 80
9 80
100 1 8
1 80
2 80
3 80
4 80
5 80
6 80
7 80
8 80 100
4 5
800 3 2
2 1
3 2
20 1 1
4 1
30 5 1
4 2
100 4 1
5 0
5 7 0 9
												

北大poj-1062的更多相关文章

  1. 北大POJ题库使用指南

    原文地址:北大POJ题库使用指南 北大ACM题分类主流算法: 1.搜索 //回溯 2.DP(动态规划)//记忆化搜索 3.贪心 4.图论 //最短路径.最小生成树.网络流 5.数论 //组合数学(排列 ...

  2. POJ 1062 昂贵的聘礼

    C - 昂贵的聘礼 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit St ...

  3. 最短路(Dijkstra) POJ 1062 昂贵的聘礼

    题目传送门 /* 最短路:Dijkstra算法,首先依照等级差距枚举“删除”某些点,即used,然后分别从该点出发生成最短路 更新每个点的最短路的最小值 注意:国王的等级不一定是最高的:) */ #i ...

  4. POJ 1062 昂贵的聘礼(图论,最短路径)

    POJ 1062 昂贵的聘礼(图论,最短路径) Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女 ...

  5. 最短路POJ 1062 昂贵的聘礼

    C - 昂贵的聘礼 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit St ...

  6. POJ 1062 ( dijkstra )

    http://poj.org/problem?id=1062 一个中文题,一个多月之前我做过,当时我是用搜索写的,不过苦于卡在无法确定等级关系,所以就错了. 看了别人的博客后,我还是不是很理解所谓的枚 ...

  7. POJ 1062 昂贵的聘礼 最短路 难度:0

    http://poj.org/problem?id=1062 #include <iostream> #include <cstring> #include <queue ...

  8. poj 1062(有限制的最短路)

    题目链接:http://poj.org/problem?id=1062 思路:要求对于最短路上的点,不能出现等级之差大于m,于是我们可以枚举,假设酋长的等级为level,于是这个区间范围[level- ...

  9. poj 1062 昂贵的聘礼(最短路 dijk+枚举)

    终于A 了,这题做着真麻烦 题目:http://poj.org/problem?id=1062 dijk 一般用于正权有向图 此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等 ...

  10. (最短路 dijkstra)昂贵的聘礼 -- poj -- 1062

    链接: http://poj.org/problem?id=1062 昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

随机推荐

  1. xcode 创建项目 勾选 git 出现警告

    1. 解决方法: 在mac机上找到终端工具  >> 这里先介绍下使用Command-line. 1,下载Git installer,地址:http://git-scm.com/downlo ...

  2. LeetCode算法题解

    1.给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?(181) 解法一:举例说明,为了减少复杂度,就使用八位二进制吧. ...

  3. SQL 是什么?

    一.简介   SQL,Structured Query Language,结构化查询语言.  

  4. R实战之热点图(HeatMap)

    快速实现是搜索帮助文档的首要目的,所以此处涉及实战的文章一概略去传统帮助文档的理论部分,直接上代码加注释! 本文将介绍R语言下利用ggplot2包制作heatmap的代码 -------------- ...

  5. 开发板A/D转换原理

    A/D转换器(Analog-to-Digital Converter)又叫模/数转换器,即使将模拟信(电压或是电流的形式)转换成数字信号.这种数字信号可让仪表,计算机外设接口或是微处理机来加以操作或是 ...

  6. python操作数据库产生中文乱码问题【已解决】

    记:最近在使用python进行学生成绩管理系统设计时,遇到了一个中文显示的问题,这个问题困扰了一个上午,查阅了有关资料,锁定了原因——编码问题.最终更改编码设置,问题得到了解决. 具体做法: 1 Py ...

  7. [linux] mysql跨服务器访问, iptables设置

    跨服务器mysql访问, iptables配置 1> 设置被访问机器的mysql权限 grant all privileges on *.* to root@"[ip]" i ...

  8. 协程 & 用户级(内核级)线程 & 切换开销 & 协程与异步回调的差异

    今天先是看到多线程级别的内容,然后又看到协程的内容. 基本的领会是,协程是对异步回调方式的一种变换,同样是在一个线程内,协程通过主动放弃时间片交由其他协程执行来协作,故名协程. 而协程很早就有了,那时 ...

  9. M1卡介绍

    本文整理自网络. M1卡是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号,目前都有国产芯片与其兼容,属于非接触式IC卡.最为重要的优点是可读可 ...

  10. Oracle存储过程-自定义数据类型,集合,遍历取值

    摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇 ...