poj 3287 The Trip, 2007_贪心
题意:把一个包放入另一个包内,使得总共要带的件数最少,就是说大包可以装小包,且一个大包只能装一个小包,但是这个小包可以继续装更小的包。
思路:因为相同大小的包不能互相装,所以最小数量就是有相同尺寸的包的最大数量.
#include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 1000100 int c[N],a[N]; int main(int argc, char** argv) { int n,i,u,j; while(scanf("%d",&n)!=EOF&&n){ u=0; memset(c,0,sizeof(c)); for(i=0;i<n;i++){ scanf("%d",&a[i]); c[a[i]]++; if(c[a[i]]>u) u=c[a[i]]; } sort(a,a+n); printf("%d\n",u); for(i=0;i<u;i++){ printf("%d",a[i]); for(j=i+u;j<n;j+=u){ printf(" %d",a[j]); } printf("\n"); } } return 0; }
不怕路长,只怕心老.