uva11100 The Trip, 2007--贪心(输出方式想不到啊!!!)

7 篇文章 0 订阅
6 篇文章 0 订阅
本文讨论了如何在背包问题中优化外层背包个数与嵌套层数,确保最外层背包数量最少,并使每个嵌套的背包层数尽可能小。通过分析实例,提出最小外层背包个数等于所有背包中相同元素数量的最大值,并介绍了一种平均嵌套的方法来实现目标。
摘要由CSDN通过智能技术生成
#include<cstdlib>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<set>
#include<cstring>
#include <algorithm>
#define N 10000
#define M 1000001
using namespace std;
int a[N];
int num[M];
int n;

int main()
{

//    freopen("ex.in","r",stdin);
    int first=1;
    while(scanf("%d",&n)&&n)
    {
        if(first)first=0;
        else printf("\n");
        memset(num,0,sizeof(num));
        int maxv=0,v;
        for(int i=0;i<n;++i)
        	{
        	    scanf("%d",&a[i]);
        	    num[a[i]]++;
        	    if(num[a[i]]>maxv)
        	    {
        	        maxv=num[a[i]];
        	        v=a[i];
        	    }
        	}

        	sort(a,a+n);
        	printf("%d\n",maxv);
        	for(int i=0;i<maxv;i++)
        	{
        	    int j=i;
        	        printf("%d",a[j]);
        	    for(j+=maxv;j<n;j+=maxv)
        	    {
        	        printf(" %d",a[j]);
        	    }
        	    printf("\n");
        	}
    }
    return 0;
}
要求最外层背包个数最少,并且每个嵌套的背包的层数也要尽量小,从样例里我们就能发现,最小的外层背包个数等于,所有背包中相同的个数最大的;
要做到每个嵌套的背包层数小,只要平均的嵌套,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值