昂贵的聘礼
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. NodeJS的安装

    1. 进入官网下载对应版本的nodejs(我选择的是32位的window7版本x86) 2. 默认路径可修改   3. install就可以安装在cmd中输入path查看路径(我的是E:\compan ...

  2. 图论$\cdot$2-SAT问题

    2-SAT问题是这样的:有$n$个布尔变量$x_i$,另有$m$个需要满足的条件,每个条件的形式都是“$x_i$为真/假或者$x_j$为真/假”.比如:"$x_1$为真或者$x_3$为假“. ...

  3. zabbix通过API创建交换机模板,ifAdminStatus;ifOperStatus;ifInUcastPkts;ifAlias

    最终效果: 目的:         通过zabbix的Latest data查看主机就可以看到其监控结果. 监控项:         # 管理状态          IF-MIB::ifAdminSt ...

  4. react native get started run 模拟机报错解决

    参照 http://reactnative.cn/docs/0.30/getting-started.html#content 1)当执行 react-native run-android 这个环节的 ...

  5. js根据当前时间获取当前季度,月份,和第几周

    function jidu()  {   var getMonthWeek = function (a, b, c) {    var date = new Date(a, parseInt(b) - ...

  6. Error: listen EADDRINUSE

    有可能是已经作用了18001端口 netstat -antp|grep 18001 kill 然后重启程序. events.js:72 throw er; // Unhandled 'error' e ...

  7. linux笔记:用户和用户组管理-用户配置文件

    用户信息文件(/etc/passwd): 影子文件(/etc/shadow) 组信息文件(/etc/group)和组密码文件(/etc/gshadow):

  8. C学习笔记(八)字符输入输出和输入确认

    缓冲区 缓冲区分为两类:完全缓冲(fully buffered)I/O和行缓冲(line-buffered)I/O.完全缓冲在缓冲区满时被清空(内容被发送至目的地).这种类型常出现在文件输入中.缓冲区 ...

  9. td元素

    一.设置td的宽和高,不设置table的宽和高 1. 当td的值为具体数值时 a. td显示的宽按设置的数值变动,但宽度不会大于父元素:若强行将宽设置的大于父元素的宽,会被系统无视,即最大宽度为父元素 ...

  10. qt5.4.0在windows,32位下的编译, vs2010平台

    假设源代码入在D:\3DFrame\qt-everywhere-opensource-src-5.4.0\qt-everywhere-opensource-src-5.4.0 1:首先从官方网站下载源 ...