代码一小错,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);
 }
 
 |