poj 1599 简单 dfs
来源:互联网 发布:一键安装php集成环境 编辑:程序博客网 时间:2024/06/10 00:39
题意:给你C个小组(C<=5),S个数值(S<=10, C*2>=S)。要将这S个数值分配给C个小组,每小组最多分配两个数值。求最优的分配方式,使得下面 IMBALANCE 的值最小。
其中AM = 所有数值之和 / C; CMi = 第i小组的数值之和;
#include<iostream>#include<algorithm>#include<cstdio>#include<vector>#include<cmath>#include<cstring>using namespace std;const int maxn=12;int a[maxn],s,c,q[maxn];double ave,ans;int p[maxn][4],res[maxn][4];void dfs(int idx){ int i,j; if(idx>s)///分配完全 { double sum=0; int i,j; for(i=1;i<=c;i++) { sum+=fabs(q[i]-ave); } if(sum<ans) { ans=sum; for(i=1;i<=c;i++)//赋值 { res[i][0]=0; for(j=1;j<=p[i][0];j++) { res[i][0]++; res[i][j]=p[i][j]; } } } return; } for(i=1; i<=c; i++)///尝试把第 idx 个分别放在这 c 个腔里!! { if(p[i][0]>=2) continue; p[i][0]++; p[i][p[i][0]]=a[idx]; q[i]+=a[idx]; dfs(idx+1); q[i]-=a[idx]; p[i][0]--; }}void init(){ for(int i=0;i<=c;i++) { q[i]=0; for(int j=0;j<=3;j++) { p[i][j]=0; res[i][j]=0; } }}int main(){ int cas=1; while(scanf("%d%d",&c,&s)!=EOF) { int i,j,sum=0; for(i=1; i<=s; i++) { scanf("%d",&a[i]); sum+=a[i]; } init(); ans=200000000; ave=sum*1.0/c; dfs(1); printf("Set #%d\n",cas++); for(i=1;i<=c;i++) { printf(" %d:",i-1); for(j=1;j<=res[i][0];j++) { printf(" %d",res[i][j]); }printf("\n"); } printf("IMBALANCE %.5f\n\n",ans); } return 0;}
- poj 1599 简单 dfs
- poj 2303 简单dfs
- poj 3140 简单dfs
- POJ 2488 简单 DFS
- Poj 1014简单dfs
- POJ 1979(简单dfs)
- DFS专攻:POJ 3194 简单DFS
- POJ 1979 简单dfs||bfs
- POJ 1562 (简单dfs)
- POJ 1321 _ 简单dfs
- POJ 2531 (简单dfs)
- POJ 1011-Sticks 简单搜索DFS
- POJ 1321-棋盘问题 简单搜索DFS
- POJ 3051 Satellite Photographs 简单DFS
- POJ 1111 Image Perimeters 简单DFS
- poj 1088 滑雪(简单dfs)
- poj-3895-Cycles of Lanes 简单DFS
- poj 3411 Paid Roads 简单的dfs
- (droid分享)新浪微博开发系列【十二】之图片浏览
- 反转一个链表。递归算法
- 【学习笔记】【第五章】仿真验证与Testbench编写
- 如何在SQL Server 2005中修复损坏的数据库
- 数据库优化的讨论
- poj 1599 简单 dfs
- spring注解
- UML
- js复制(兼容ie、google、opera、safari等)
- 反转一个链表。递归算法
- 图片示例
- (droid分享)新浪微博开发系列【十三】之微博的评论转发
- 一个用jquery写的判断div滚动条到底部的方法
- win7 、IIS7.0 搭建ASP网站