uva 10603 Fill
来源:互联网 发布:wmware 怎么安装mac os 编辑:程序博客网 时间:2024/06/09 20:56
#include<iostream>#include<cstdio>#include<queue>#include<cstring>using namespace std;const int maxn=1000;int ans[maxn];int vis[maxn][maxn];struct node{ int v[3],dist; bool operator < (const node &rhs) const { return dist>rhs.dist; }};void up_data(node u){ for(int i=0;i<3;i++) { int d=u.v[i]; if(ans[d]<0||u.dist<ans[d]) ans[d]=u.dist; }}void solve(int a,int b,int c,int d){ int cap[3]; cap[0]=a;cap[1]=b;cap[2]=c; memset(vis,0,sizeof(vis)); memset(ans,-1,sizeof(ans)); node u; u.v[0]=0;u.v[1]=0;u.v[2]=c;u.dist=0; priority_queue<node> q; q.push(u); vis[0][0]=1; while(!q.empty()) { node u2=q.top();q.pop(); if(ans[d]>=0) break; up_data(u2); for(int i=0;i<3;i++) for(int j=0;j<3;j++){ if(i!=j) { if(u2.v[i]==0||u2.v[j]==cap[j]) continue; node u3;//此题唯一错的点,一开始没有弄一个u3,直接把u2推进队列了,导致后续展开不了,以后记住,如果要进堆栈队列,但是这个变量接下来还要处理的情况下,申请一个新变量,再把新变量推进去。 memcpy(&u3,&u2,sizeof(u2)); int amount=min(cap[j],u2.v[i]+u2.v[j])-u2.v[j]; u3.v[i]-=amount; u3.v[j]+=amount; u3.dist+=amount; if(!vis[u3.v[0]][u3.v[1]]) { vis[u3.v[0]][u3.v[1]]=1; q.push(u3); } } } } while(d>=0){ if(ans[d]>=0){ printf("%d %d\n",ans[d],d); break; } d--; }}int main(){ int t; scanf("%d",&t); int a,b,c,d; while(t--) { scanf("%d%d%d%d",&a,&b,&c,&d); solve(a,b,c,d); } return 0;}
0 0
- UVA 10603 Fill
- uva 10603 - Fill
- uva 10603 - Fill
- UVa 10603 - Fill
- uva 10603 - Fill bfs
- uva 10603 Fill
- UVA 10603 - Fill
- UVa 10603 - Fill
- UVa:10603 Fill
- uva 10603 Fill
- UVA 10603 - Fill BFS~
- UVa 10603 - Fill
- UVA 10603-Fill
- uva 10603 Fill
- uva 10603 Fill
- UVa 10603 Fill
- UVa - 10603 - Fill
- UVA 10603 Fill
- 怎么练字才会有效果,多久才能有体现
- mysql数据类型
- TOEFL writing——causative verbs
- Guass_seidel迭代法
- andriod 注解找控件 简单步骤
- uva 10603 Fill
- Scala中的协变,逆变,上界,下界等
- 有哪些适合女生练字的字帖?
- Unity3d中Quaternion.LookRotation使用方法
- C/C++卡布列克运算验证
- socket Client&Server
- 英文如何练字?
- MySQL数据库优化(二)——MySQL事务
- TurtleBot配置