座位调整(百度之星)
2012-04-09 22:38
302 查看
//归类:XXXX
//BY:09071308
//题目:调整位置
//BY:09071308
//题目:调整位置
// D[100 50 80 ;100 70 30 ;50 100 30]->280 测试成功 #include<iostream> #include<ctime> using namespace std; int N;//位置个数 int *V;//每个位置容量 int M;//员工个数 int **D;//喜好度 void GetSort(int *V,int *t,int M); int Highest(int N,int M,int *V,int **D,int*s,int*t); void main() { int i,j; cin>>N>>M;// V = new int ;// D = new int *[M];// for(i=0;i<M;i++) D[i] = new int ; for(i=0;i<N;i++) cin>>V[i]; for(i=0;i<M;i++) for(j=0;j<N;j++) cin>>D[i][j]; int *s = new int ;// for(i=0;i<N;i++) s[i] = i; int *t = new int ;// for(j=0;j<M;j++) t[j] = j; double start = (double)clock()/CLOCKS_PER_SEC;////计时开始》》》》 GetSort(V,t,M); cout<<"结果:"<<Highest(N,M,V,D,s,t)<<endl; double end = (double)clock()/CLOCKS_PER_SEC;////计时结束《《《《《 cout<<"TIME_used:"<<(end-start)<<endl; }// end of main() void GetSort(int *V,int *t,int M) { bool *flags = new bool[M]; for(int i=0;i<M;i++) flags[i] = false; int p,q = 0; for(i=0;i<M;i++) { for(int j=0;j<M;j++) if(flags[j] == false) {p = j; break;} for(j=p+1;j<M;j++) if(V[j]>V[p]) p = j; flags[p] = true; t[q++] = p; } }// end of func int Highest(int N,int M,int *V,int **D,int*s,int*t) {// s,t为虚址 //交换均采用虚拟算法 //逐步缩小矩阵的行和列,并使缩小速度最大 int i,j,k; int sum = 0;//所求满意度之和 int n = N;//剩下的员工 int *temp = new int ;//每步的正负效应和向量 for(i=0;i<N;i++) temp[i] = 0; for(int m=0;m<M;m++) { for(i=0;i<n;i++) { temp[i] = D[s[i]][t[m]]; for(j=m+1;j<M;j++) temp[i] -= D[s[i]][t[j]]; } for(i=V[t[m]];i>0;i--)//把m区填满 { for(j=1,k=0;j<n;j++) if(temp[j]>temp[k]) k = j; sum += D[s[k]][t[m]]; s[k] = s[n-1]; n--; } } for(i=0;i<n;i++)//最后剩下的人去M区 sum+=D[s[i]][t[M-1]]; return sum; }//end of func /************************************************************************************************ #include<iostream> #include<ctime> using namespace std; int N;//位置个数 int *V;//每个位置容量 int M;//员工个数 int **D;//喜好度 void GetSort(int *V,int *t,int M); int Highest(int N,int M,int *V,int **D,int*s,int*t); void main() { int i,j; cin>>N>>M;// V = new int ;// D = new int *[M];// for(i=0;i<M;i++) D[i] = new int ; for(i=0;i<N;i++) cin>>V[i]; for(i=0;i<M;i++) for(j=0;j<N;j++) cin>>D[i][j]; int *s = new int ;// for(i=0;i<N;i++) s[i] = i; int *t = new int ;// for(j=0;j<M;j++) t[j] = j; double start = (double)clock()/CLOCKS_PER_SEC;////计时开始》》》》 GetSort(V,t,M); cout<<"结果:"<<Highest(N,M,V,D,s,t)<<endl; double end = (double)clock()/CLOCKS_PER_SEC;////计时结束《《《《《 cout<<"TIME_used:"<<(end-start)<<endl; }// end of main() void GetSort(int *V,int *t,int M) { bool *flags = new bool[M]; for(int i=0;i<M;i++) flags[i] = false; int p,q = 0; for(i=0;i<M;i++) { for(int j=0;j<M;j++) if(flags[j] == false) {p = j; break;} for(j=p+1;j<M;j++) if(V[j]>V[p]) p = j; flags[p] = true; t[q++] = p; } }// end of func int Highest(int N,int M,int *V,int **D,int*s,int*t) {// s,t为虚址 //交换均采用虚拟算法 //逐步缩小矩阵的行和列,并使缩小速度最大 int i,j,k; int sum = 0;//所求满意度之和 int n = N;//剩下的员工 int *temp = new int ;//每步的正负效应和向量 for(i=0;i<N;i++) temp[i] = 0; for(int m=0;m<M;m++) { for(i=0;i<n;i++) { temp[i] = D[s[i]][t[m]]; for(j=m+1;j<M;j++) temp[i] -= D[s[i]][t[j]]; } for(i=V[t[m]];i>0;i--)//把m区填满 { for(j=1,k=0;j<n;j++) if(temp[j]>temp[k]) k = j; sum += D[s[k]][t[m]]; s[k] = s[n-1]; n--; } } for(i=0;i<n;i++)//最后剩下的人去M区 sum+=D[s[i]][t[M-1]]; return sum; }//end of func
相关文章推荐
- 百度之星2006年初赛 座位调整
- 座位调整
- 座位调整问题【解决思路及求证】
- 座位调整
- php:百度Astar2006程序设计大赛预赛题--座位调整
- 2006 年百度之星程序设计大赛初赛题目---座位调整--菜鸟学习算法
- 2006 年百度之星程序设计大赛初赛题目--座位调整
- 程序设计:座位调整
- 2006年百度之星程序设计大赛试题初赛题目-题5-座位调整
- 2006年百度之星程序设计大赛试题初赛题目-题5-座位调整
- sga_target memory_target 调整大小
- uitoolbar item 自动调整布局
- HDU6108 小C的倍数问题(规律,2017"百度之星"程序设计大赛 - 初赛(A))
- C#调整时间格式
- 调整Linux系统实现高并发
- 百度之星2017初赛A-1005-今夕何夕
- Oracle 内存调整
- Keyboard、In-Call Status Bar的监听及视图位置改变调整(实例说明)
- 2017年百度之星编程赛初赛A场-1005-今夕何夕
- 关于调整互联网、电话订票预售期有关事项公告