NYOJ 510 昂贵的聘礼 dfs
来源:互联网 发布:淘宝军用匕首 编辑:程序博客网 时间:2024/06/06 02:13
#include <stdio.h>#include <string.h>#define N 110struct Node{ int p; // 价格 int l; // 等级 int x; // 替代品数量 int num[N]; // 替代品编号 int money[N]; // 优惠价格};int m, ans; // 地位差, 最小花费Node a[N]; // 邻接表bool bz[N]; // 标记数组(用于判重)void dfs(int k, int left, int right, int count) // k是当前物品编号, left、right是允许的等级的上下界, count是k之前的最小花费{ bz[k] = 1; if(a[k].l < left || a[k].l > right) return; // 判断是否越界 if(a[k].l - m > left) left = a[k].l - m; // 更新左右边界(只能缩小) if(a[k].l + m < right) right = a[k].l + m; if(a[k].p + count < ans) ans = a[k].p + count; // 更新ans for(int i = 0; i < a[k].x; i ++){ int t = a[k].num[i]; // 检查替代品 if(bz[t]) continue; // 检查是否走过 bz[t] = 1; dfs(t, left, right, count + a[k].money[i]); bz[t] = 0; }}int main(){ int n; while(1){ memset(bz, 0, sizeof(bz)); scanf("%d%d", &m, &n); if(!m && !n) break; for(int i = 1; i <= n; i ++){ scanf("%d%d%d", &a[i].p, &a[i].l, &a[i].x); for(int j = 0; j < a[i].x; j ++){ scanf("%d%d", &a[i].num[j], &a[i].money[j]); } } ans = a[1].p; dfs(1, a[1].l - m, a[1].l + m, 0); printf("%d\n", ans); } return 0;}
0 0
- NYOJ 510 昂贵的聘礼 dfs
- nyoj 510 昂贵的聘礼
- NYOJ-510 昂贵的聘礼(图论)
- POJ1062--昂贵的聘礼--DFS
- 昂贵的聘礼(dfs)
- POJ1062 昂贵的聘礼 【DFS】
- poj1062 昂贵的聘礼 (DFS)
- POJ_1062 昂贵的聘礼【DFS】
- 昂贵的聘礼 (dfs)
- POJ 1062 (nyoj - 510)昂贵的聘礼
- poj 1062(nyoj 510) 昂贵的聘礼(dijkstra)
- poj 1062 昂贵的聘礼(DFS)
- 昂贵的聘礼 [DFS][最短路]
- poj 1062 昂贵的聘礼 dfs
- nyist 510昂贵的聘礼
- 昂贵的聘礼,很昂贵
- poj 1062 昂贵的聘礼 DFS算法应用
- POJ - 1062昂贵的聘礼最短路或者DFS
- UVa--839 Not so Mobile
- 你收到了吗,我的三行情书。
- 希尔排序
- 漫步微积分十——复合函数和链式法则
- 快速求幂与快速幂模
- NYOJ 510 昂贵的聘礼 dfs
- 数据解析
- 直接插入排序
- 简单选择排序
- 硬币找零(完全背包)
- FFmpeg应用程序的使用
- 冒泡排序
- dp整数划分问题——03:复杂的整数划分问题
- TIANKENG’s restaurant hd 4883