博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1062, 昂贵的聘礼
阅读量:7082 次
发布时间:2019-06-28

本文共 2299 字,大约阅读时间需要 7 分钟。

Time Limit: 1000MS  Memory Limit: 10000K

Total Submissions: 11223  Accepted: 2809

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

 

Source

浙江


//
 1062.cpp : Defines the entry point for the console application.
//
#include 
<
iostream
>
#include 
<
algorithm
>
using
 
namespace
 std;
int
 main(
int
 argc, 
char
*
 argv[])
{
    
int
 M,N;
    cin 
>>
 M 
>>
 N;
    
short
 edge[
10001
][
4
];
    
short
 Dis[
101
];
    
int
 ps 
=
 
0
;
    
int
 P,L,Z, T, V;
    
short
 Lvl[
101
];
    memset(Lvl, 
0
sizeof
(Lvl));
    
for
 (
int
 i 
=
 
1
; i 
<=
 N; 
++
i)
    {
        cin 
>>
 P 
>>
 L 
>>
 Z;
        edge[ps][
0
=
 i;
        edge[ps][
1
=
 
0
;
        edge[ps][
2
=
 P;
        Lvl[i] 
=
 L;
        
++
ps;
        
for
 (
int
 j 
=
 
0
; j 
<
 Z; 
++
j)
        {
            cin 
>>
 T 
>>
 V;
            
            edge[ps][
0
=
 i;
            edge[ps][
1
=
 T;
            edge[ps][
2
=
 V;
            
++
ps;
        };
    }
    
short
 minP 
=
 
10000
;
    
for
 (
int
 k 
=
 Lvl[
1
]; k 
<=
 Lvl[
1
+
 M; 
++
k)
    {
        edge[
0
][
3
=
 
1
;
        
for
 (
int
 i 
=
 
1
; i 
<
 ps; 
++
i)
            
if
 (Lvl[edge[i][
0
]] 
<=
 k 
&&
 Lvl[edge[i][
0
]] 
>=
 k 
-
 M 
&&
 ((Lvl[edge[i][
1
]] 
<=
 k
      
&&
 Lvl[edge[i][
1
]] 
>=
 k 
-
 M)
||
edge[i][
1
==
 
0
))
                edge[i][
3
=
 
1
;
            
else
                edge[i][
3
=
 
0
;
        fill(
&
Dis[
0
], 
&
Dis[N 
+
 
1
], 
10000
);
        Dis[
1
=
 
0
;
        
for
 (
int
 i 
=
 
0
; i 
<
 N - 1; 
++
i)
            
for
 (
int
 j 
=
 
0
; j 
<
 ps; 
++
j)
                
if
 (edge[j][
3
==
 
1
 
&&
 Dis[edge[j][
1
]] 
>
 Dis[edge[j][
0
]] 
+
 edge[j][
2
])
                    Dis[edge[j][
1
]] 
=
 Dis[edge[j][
0
]] 
+
 edge[j][
2
];
        minP 
=
 min(minP, Dis[
0
]);
    }
    cout 
<<
 minP
<<
"
\n
"
;
    
return
 
0
;
}

转载于:https://www.cnblogs.com/asuran/archive/2009/09/30/1576788.html

你可能感兴趣的文章
RTP封装h264
查看>>
BYOD:浮躁的名词背后我们不知道的事情
查看>>
Android 7.0之访问文件的权限和FileProvider类
查看>>
安卓selinux权限修改(基于tiny4412开发板)
查看>>
Web前端和后端之区分,以及…
查看>>
前端(第一节课 HTML、CSS 、JAVAscript的概念)
查看>>
Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了
查看>>
<Linux性能调优指南>主要思路流程
查看>>
让天下没有难做的研发效能,云效金牌合作伙伴亮相云栖大会
查看>>
C语言实现一个列表式的学生信息管理系统(完善)
查看>>
从拒绝到拥抱 企业经历云安全的六个阶段
查看>>
对话华途“少帅” 深耕数据安全市场
查看>>
IDC:商业分析服务加速行业布局 与大数据结合紧密
查看>>
《数学与泛型编程:高效编程的奥秘》一第3章 古希腊的数论
查看>>
新西兰发明新型传感器,电子产品不再需要充电器
查看>>
IDC:2017年竞争和工作负载变革将改变供应链生态系统
查看>>
万国数据:“为了全方位保障混合云数据中心的安全,我们连猫都养了十只。”...
查看>>
移动金融2.0时代来临 “业务优化 +”平台成为趋势
查看>>
ssh使用无密码登陆
查看>>
Fairware勒索软件频繁攻击Linux服务器 大家赶紧做好备份
查看>>