题目

Sample Input
5
20 30 10 50 40
4
200 100 100 200
Sample Output
4
2
思路
尝试直接暴力,先统计每个数的量,然后从大到小,如果大的数后面可以跟小的数就跟,ans++统计
AC代码
#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define pre(i,a,b) for(int i=a;i>=b;--i)
#define m(x) memset(x,0,sizeof x)
typedef long long ll;
const int maxn = 1e3+10;
#define PI acos(-1)
int a[maxn];
int main()
{
int n,x,maxx,ans;
while(~scanf("%d",&n))
{
ans = 0;
maxx = -1;
m(a);
//读入数据并统计每个数的量
rep(i, 0, n-1){
scanf("%d",&x);
a[x]++;
maxx = max(maxx,x);
}
int i = maxx;
//循环一直到i=0为止
while(i)
{
//这里是在找有读入进去的数
while(!a[i]&&i>0)i--;
a[i]--;
//在i数之前如果有存在数则将其放在i数之前,同时ans+1,这个数被消耗掉
for(int j=i-1;j>0;j--)
{
if(a[j])
{
a[j]--;
ans++;
}
}
}
printf("%d\n",ans);
}
return 0;
}
使用C++解决数组组合问题
该篇博客介绍了一种C++实现的算法,用于解决输入数组中元素组合的问题。通过统计每个数的出现次数,从大到小排列并尝试组合,得出组合总数。示例代码展示了具体实现过程,包括读取数据、统计、组合和输出结果。
1914

被折叠的 条评论
为什么被折叠?



