代码一小错,BUG找一年
能体会到会计差2毛平账,找三天三夜的痛了
set.end()
set<int> A;
A.end()
不是指向集合A最后一个元素的指针 !
--A.end()
才是!
A.end()
实际存放的是A.size()
的值(所以set求元素个数时间复杂度是O(1)的)!
坑的来源:洛谷p1460 健康的荷斯坦奶牛 Healthy Holsteins
找坑用时:起始:01-28 19:23:38 结束:01-28 22:34:38 共计3小时
#include<bits/stdc++.h> using namespace std; int wss[26]; int sl_nutrition[16][26]; int v,g;
struct node{ set<int> sl; int nutrition[26]; node(){}; node(int kind){ this->sl.insert(kind); for(int i=1;i<=v;i++) this->nutrition[i]=sl_nutrition[kind][i]; }; }; queue<node> q;
void bfs(int g){ for(int i=1;i<=g;i++) q.push(node(i)); while(!q.empty()){ node now=q.front(); q.pop(); for(int i=1;i<=v;i++){ if(now.nutrition[i]<wss[i]) break; if(i==v){ cout<<now.sl.size()<<" "; for(set<int>::iterator it=now.sl.begin();it!=now.sl.end();it++) cout<<*it<<" "; exit(0); } } for(int i=*(--now.sl.end())+1;i<=g;i++){ node next_node=now; next_node.sl.insert(i); for(int j=1;j<=v;j++) next_node.nutrition[j]+=sl_nutrition[i][j]; q.push(next_node); } } } int main(){ cin>>v; for(int i=1;i<=v;i++) cin>>wss[i]; cin>>g; for(int i=1;i<=g;i++) for(int j=1;j<=v;j++) cin>>sl_nutrition[i][j]; bfs(g); }
|