hdu 4001
来源:互联网 发布:解数独的软件 编辑:程序博客网 时间:2024/06/10 19:58
题目
大意: n个立方体,一共有三种类型,每一种的方法有自己的规则,问组合后的最大高度
想法: 膜拜Wiking大神,轻松的说出了建图方法,然后就是加一个超级源点,以它为起点,对图进行SPFA求最长路,如果方块的类型是0,那么几个相同的会出现环,所以先把这些缩成一个点
#include<stdio.h>#include<string.h>#include<vector>#include<map>#include<queue>#include<algorithm>using namespace std;#define N 1005typedef pair<int,int>ii;typedef long long ll;struct node{ int a,b,d; ll c;}p[N];struct edge{ int t; ll w;};vector<edge>e[N];map<ii,ll>m;map<ii,ll>::iterator it;int n,a,b,d,num;ll dis[N],c;bool inq[N];int main(){ // freopen("1.txt","r",stdin); while(~scanf("%d",&n)) { if(n==0) break; num=1; m.clear(); for(int i=0;i<n;i++) { scanf("%d%d%I64d%d",&a,&b,&c,&d); if(a<b) swap(a,b); if(d==0) { m[make_pair(a,b)]+=c; } else { p[num].a=a,p[num].b=b,p[num].c=c,p[num++].d=d; } } for(it=m.begin();it!=m.end();it++) { p[num].a=it->first.first,p[num].b=it->first.second,p[num].c=it->second,p[num++].d=0; } for(int i=0;i<=num;i++) e[i].clear(); for(int i=1;i<num;i++) { for(int j=1;j<num;j++) { if(i==j) continue; if(p[i].d==0) { if(p[i].a>=p[j].a&&p[i].b>=p[j].b) { edge f; f.t=i,f.w=p[i].c; e[j].push_back(f); } } else if(p[i].d==1) { if(p[i].a>=p[j].a&&p[i].b>=p[j].b&&!(p[i].a==p[j].a&&p[i].b==p[j].b))//一开始写的面积>面积,一直WA,为什么呢???因为我的a,b定义的是int,一乘就超了 == { edge f; f.t=i,f.w=p[i].c; e[j].push_back(f); } } else if(p[i].d==2) { if(p[i].a>p[j].a&&p[i].b>p[j].b) { edge f; f.t=i,f.w=p[i].c; e[j].push_back(f); } } } } for(int i=1;i<num;i++) { edge r; r.t=i,r.w=p[i].c; e[0].push_back(r); } memset(dis,0,sizeof(dis)); memset(inq,0,sizeof(inq)); queue<int>q; q.push(0); inq[0]=1; while(!q.empty()) { int x=q.front();q.pop(); inq[x]=0; for(int i=0;i<e[x].size();i++) { edge r=e[x][i]; if(dis[r.t]<dis[x]+r.w) { dis[r.t]=dis[x]+r.w; if(inq[r.t]==0) { inq[r.t]=1; q.push(r.t); } } } } ll ans=0; for(int i=1;i<num;i++) ans=max(ans,dis[i]); printf("%I64d\n",ans); } return 0;}
- hdu 4001
- HDU 4001
- hdu 4001
- HDU 4001 DP LIS
- hdu 4001(dp)
- hdu 4001解题报告
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- 一道程序员求职笔试题
- linux find命令实践
- nignx+memcached
- spring security3.x学习(10)_自定义的登录页面
- spring security3.x学习(11)_退出
- hdu 4001
- 九度1014 排名 结构体排序
- spring security3.x学习(12)_remember me
- PS(MPG)文件格式分析
- C++ char,wchar_t, string, wstring之间的转换
- csshach
- 面向对象软件设计中的开闭原则
- ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS component
- Java学习总结之贪吃蛇项目程序编写(一)