Codechef MasterChef中的错误答案

时间:2015-07-16 05:27:03

标签: set knapsack-problem

我在问题解决方案http://www.codechef.com/problems/MCHEF中遇到问题,这是我的解决方案http://ideone.com/SsbABr 我用背包和套装解决了这个问题,但我得到了错误的答案,似乎无法弄明白为什么!我也看过同样的社论也是如此。我相信我的背包DP代码是正确的。 问题似乎在下面的段中使用set来插入和维护间隔成本,这样我就可以获得每个元素的最低成本。 vector<int> L[n],R[n]; vector<oper> operarray; vector<int> cost; for(int i=0;i<m;i++){ int j,k,val; cin >> j >> k >> val; L[j-1].push_back(i); R[k-1].push_back(i); cost.push_back(val); } set<pair<int,int> > iset; for(int i=0;i<n;i++){ for(int j=0;j<L[i].size();j++){ int index = L[i][j]; iset.insert(make_pair(cost[index],index)); } b[i] = iset.begin()->first; for(int j=0;j<R[i].size();j++){ int index = R[i][j]; iset.erase(make_pair(cost[index],index)); }

1 个答案:

答案 0 :(得分:0)

实际上问题是我没有检查该集是否为空,并且当我将空集的begin元素分配给行中的数组元素时,编译器没有提示任何运行时错误

b[i] = iset.begin()->first;

以上内容应改为

if(!iset.empty())
    b[i] = iset.begin()->first;