https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2041
小背包放到大背包里,则对数最多一定与某个质量数量最多的保持一致
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <vector> #include <queue> #include <cstdlib> #include <iomanip> #include <cmath> #include <ctime> #include <map> #include <set> using namespace std; #define lowbit(x) (x&(-x)) #define max(x,y) (x>y?x:y) #define min(x,y) (x<y?x:y) #define MAX 100000000000000000 #define MOD 1000000007 #define pi acos(-1.0) #define ei exp(1) #define PI 3.141592653589793238462 #define ios() ios::sync_with_stdio(false) #define INF 0x3f3f3f3f #define mem(a) (memset(a,0,sizeof(a))) typedef long long ll; int n,a[10009]; int main() { int k=0; while(scanf("%d",&n)&& n) { for(int i=0;i<n;i++) { scanf("%d",&a[i]); } if(k) printf(" "); sort(a,a+n); int t=a[0],cnt=1; int maxn=1; for(int i=1;i<n;i++) { if(a[i]!=t) { cnt=1; t=a[i]; } else cnt++; maxn=max(maxn,cnt); } printf("%d ",maxn); for(int i=1; i<=maxn; i++) { int flag=0; for(int j=i-1;j<=n-1;j+=maxn) { if(flag==0) { printf("%d",a[j]); flag=1; } else { printf(" %d",a[j]); } } printf(" "); } } return 0; }