| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
分治水过//深度优先搜索
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int m, n; //m代表阶级差距,n代表个数
int vis[105];
struct child {
int number;
int dicount;
};
struct node {
int price;
int level;
vector<child>exchange;
};
vector<node>items;
int find(int findnum,int low,int high) {
int minprice = items[findnum - 1].price;
int num, lv;
if (low == -1 || low > items[findnum - 1].level)low = items[findnum - 1].level;
if (high == -1 || high < items[findnum - 1].level)high = items[findnum - 1].level;
for (int i = 0; i < items[findnum - 1].exchange.size(); i++) {
num = items[findnum - 1].exchange[i].number - 1;
if (vis[num] == 1)continue;
lv = items[num].level;
if (lv < high - m)continue;
if (lv > low + m)continue;
int nowprice = 0;
nowprice += items[findnum - 1].exchange[i].dicount;
vis[findnum - 1] = 1;
nowprice += find(num + 1,low,high);
vis[findnum - 1] = 0;
if (nowprice < minprice)minprice = nowprice;
}
return minprice;
}
int main() {
cin >> m >> n;
for (int i = 0; i < 105; i++)vis[i] = 0;
//开始数据的写入
while (n--) {
int price, level, x;
cin >> price >> level >> x;
node in;
in.price = price;
in.level = level;
while (x--) {
int discount;
int num;
child xin;
cin >> num >> discount;
xin.dicount = discount;
xin.number = num;
in.exchange.push_back(xin);
}
items.push_back(in);
}
cout << find(1,-1,-1) << endl;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator