Soon after he decided to design a T-shirt for our Algorithm Board on Free-City BBS, XKA found that he was trapped by all kinds of suggestions from everyone on the board. It is indeed a mission-impossible to have everybody perfectly satisfied. So he took a poll to collect people's opinions. Here are what he obtained: N people voted for M design elements (such as the ACM-ICPC logo, big names in computer science, well-known graphs, etc.). Everyone assigned each element a number of satisfaction. However, XKA can only put K (<=M) elements into his design. He needs you to pick for him the K elements such that the total number of satisfaction is maximized.
3 6 4 2 2.5 5 1 3 4 5 1 3.5 2 2 2 1 1 1 1 1 10 3 3 2 1 2 3 2 3 1 3 1 2
6 5 3 1 2 1
题意:有n个人和m件衣服,给出每个人对m件衣服的评价,输出评价最大的前k件衣服,要按下标从大到小输出;
这个题的意思理解起来确实有点困难,主要有两种要求,第一是对衣服本身的要求(评价最高,并且编号要小),第二是对输出的要求(编号从大到小输出)
#include<stdio.h> #include<algorithm> using namespace std; struct s{ int num; double mark; } a[1000],t[1000]; bool cmp(s x,s y) { if(x.mark!=y.mark) return x.mark>y.mark; return x.num<y.num; } bool cmp1(s x,s y) { return x.num>y.num; } int main() { int n,m,k,i,j,o,s; double d; while(~scanf("%d %d %d",&n,&m,&k)) { for(i=0; i<m; i++) a[i].mark=0; while(n--) { for(i=0; i<m; i++) { scanf("%lf",&d); a[i].mark+=d; a[i].num=i+1; } } sort(a,a+m,cmp);//先按总评价从大到小,相同时按编号从小到大 for(i=0;i<k;i++) t[i]=a[i];//将前k个存起来 sort(a,a+k,cmp1);//再按编号从大到小输出 for(i=0; i<k-1; i++) { printf("%d ",a[i].num); } printf("%d\n",a[i].num); } return 0; }