USACO Packing Rectangles
来源:互联网 发布:上瘾网络剧新闻发布会 编辑:程序博客网 时间:2024/06/07 16:44
/*LANG: C++TASK: packrec*/#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <vector>#include <map>#include <algorithm>#include <iostream>#include <ctime>#include <string>#include <numeric>using namespace std;#define N 25#define M 8005int pl[50][5],num,rec[5][3],Min,Count;struct rect1{ int p,q;}ans[M];void init(){ num=0; for (int i=1;i<=4;i++) for (int j=1;j<=4;j++) if (i!=j) for (int k=1;k<=4;k++) if (k!=i && k!=j) { int t=10-i-j-k; num++; pl[num][1]=i; pl[num][2]=j; pl[num][3]=k; pl[num][4]=t; } for (int i=1;i<=4;i++) scanf("%d%d",&rec[i][1],&rec[i][2]);}int Max(int a,int b,int c,int d){ int ans=a; if (b>ans) ans=b; if (c>ans) ans=c; if (d>ans) ans=d; return ans;}void check(int a,int b){ if (a>b) { int c=a; a=b; b=c; } if (a*b<Min) { Min=a*b; Count=1; ans[1].p=a; ans[1].q=b; } else if (a*b==Min) { //cout<<"*******"; Count++; ans[Count].p=a; ans[Count].q=b; }}bool cmp(const struct rect1 &a,const struct rect1 &b){ return a.p<b.p;}int main(){ freopen("packrec.in","r",stdin);freopen("packrec.out","w",stdout); //freopen("a.txt","r",stdin); init(); Min=40005; for (int i=1;i<=num;i++) { int a,b,c,d; a=pl[i][1];b=pl[i][2];c=pl[i][3];d=pl[i][4]; for (int i1=1;i1<=2;i1++) for (int i2=1;i2<=2;i2++) for (int i3=1;i3<=2;i3++) for (int i4=1;i4<=2;i4++) { int a1=rec[a][i1],a2=rec[a][3-i1]; int b1=rec[b][i2],b2=rec[b][3-i2]; int c1=rec[c][i3],c2=rec[c][3-i3]; int d1=rec[d][i4],d2=rec[d][3-i4]; int wide,leng; wide=a2+b2+c2+d2; leng=Max(a1,b1,c1,d1); check(wide,leng); wide=max(d1,a2+b2+c2); leng=Max(a1,b1,c1,0)+d2; check(wide,leng); wide=max(d1,a2+b2)+c2; leng=max( max(a1,b1)+d2 ,c1); check(wide,leng); wide=a2+max(b2,c2)+d2; leng=Max(a1,b1+c1,d1,0); check(wide,leng); wide=max(b2+c2,a2+d2); leng=max(a1,d1)+max(b1,c1); if (a1+b1<leng && c1+d1<leng && (a2<=b2 && b1<=c1 || d2<=c2 && b1>=c1)) leng-=min(leng-a1-b1,leng-c1-d1); check(wide,leng);// wide=max(a2,b2)+max(c2,d2);// leng=max(a1+b1,c1+d1);// check(wide,leng); } } sort(ans+1,ans+Count+1,cmp); ans[0].p=-2; printf("%d\n",Min); for (int i=1;i<=Count;i++) if (ans[i].p!=ans[i-1].p) printf("%d %d\n",ans[i].p,ans[i].q); return 0;}
http://www.nocow.cn/index.php/Translate:USACO/packrec
最后一种情况不太好写,我是把上面两个先并一起,下面两个再并一起,然后看看这两个大的之间能不能压缩。
- USACO--Packing Rectangles
- USACO 1.4-Packing Rectangles
- Packing Rectangles(USACO)
- [USACO] Packing Rectangles
- USACO Packing Rectangles [cheated]
- usaco Packing Rectangles
- USACO:PROB Packing Rectangles
- USACO Packing Rectangles
- USACO-Packing Rectangles
- USACO Packing Rectangles
- USACO 1.4 Packing Rectangles
- USACO s1.4 Packing Rectangles
- USACO 1.4.1 packing rectangles
- USACO 1.4.1Packing Rectangles
- [USACO 1.4.1] Packing Rectangles
- usaco 1.4.2 Packing Rectangles
- usaco 1.4.1 Packing Rectangles
- [搜索]USACO-1.4-Packing Rectangles
- Android OptionsMenu和 ContextMenu
- HttpServletRequest request=ServletActionContext.getRequest();
- Basics of Apache Ant
- onInterceptTouchEvent和onTouchEvent调用时序
- <action name="userAction_save" class="app.converter.UserAction" method="save">
- USACO Packing Rectangles
- 三维显示软件制作---GUI部分
- SendTo命令的运用
- poj 2017 Red and Black
- Linux逻辑卷管理(LVM)操作笔记
- Eclipse上安装ivy插件
- LUA string.format的小改进
- mysql存储过程一次连接多次调用失败的问题解决
- 毕设经验