首页 新闻 搜索 专区 学院

这题十个点过了七个,求哪里不对????,下面是我打的代码

0
悬赏园豆:20 [已解决问题] 解决于 2017-08-21 16:33

小Z 搭积木
文件名输入文件输出文件时间限制空间限制
box.cpp box.in box.out 2s 128MB
题目描述
小Z 喜欢搭积木。小Z 一共有n 块积木,并且积木只能竖着一块一块的摞,可
以摞多列。小Z 的积木都是智能积木,第i 块积木有一个情绪值Xi。当摞在该积
木上面积木总数超过Xi 时,i 号积木就会不高兴。小Z 情商这么高,肯定不希望
有积木不高兴。但是他又希望每块积木都被用上,并且摞的积木列的总数最少。你
能帮帮萌萌的小Z 吗?
输入格式
输入文件第一行一个数字n,含义如题目所述。
第2 行一共n 个数,第i 个数为Xi,含义如题目所述。
输出格式
输出一个数字,表示最小的积木列数目。
样例输入1
3
0 0 10
样例输出1
2
样例输入2
4
0 0 0 0
样例输出2
4
数据范围
30% 数据,1  n  10
60% 数据,1  n  100
80% 数据,1  n  1000
100% 数据,1  n  5000
对于所有数据点,都有Xi  n

复制代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<stdio.h>
#include<cstring>
#include<iomanip>
using namespace std;
int qing[5001];  
int main()
{
    freopen("box.in","r",stdin);
    freopen("box.out","w",stdout);
    int n,s=1,lie=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>qing[i];
    }
    for(int i=1;i<=n;i++)
    {
        if(qing[i]==0)
        {
            lie++;
        }
    }
    for(int i=1;i<=n;i++)
    {
        int ans=0;
        for(int j=1;j<=n;j++)
        {
            if(qing[j]==i)
            {
                ans++;
            }
        }
        if(ans>i)
        {
            s=s+ans-i;
        }
    }
    
            
        if(lie>=s)
        {
            cout<<lie;
        }
        if(lie<s)
        {
            cout<<s;
        }
    
    
return 0;
}
沉沦的黑客的主页 沉沦的黑客 | 初学一级 | 园豆:170
提问于:2017-07-29 07:56
< >
分享
最佳答案
0

你的思路显然有问题,比如n为3,情绪值分别为1 1 2你的代码就过不了,你可以想一下为什么。

我觉得这题可以先按情绪值从小到大排序,然后从第一个情绪值往后找可以放在它下面的,一遍扫完就是一列,直到所有的积木都放上去了,这样贪心就可以了。

代码大概如下:

#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
int qing[5001];
bool sign[5001];
int main() {
freopen("box.in", "r", stdin);
freopen("box.out", "w", stdout);
int n;
cin >> n;
for(int i=0; i<n; i++)
scanf("%d", &qing[i]);
sort(qing, qing+n);
int sum = 0, ans = 0;
while(sum != n) {
ans++;
int curr = 0;
for(int i=0; i<n; i++) {
if(!sign[i] && qing[i] >= curr) {
sign[i] = true;
curr++;
sum++;
}
}
}
cout << ans << endl;
return 0;
}

收获园豆:20
我竟无言以对重名 | 初学一级 |园豆:45 | 2017-07-30 21:28
其他回答(1)
0

没有看懂你的问题。

金琥 | 园豆:2570 (老鸟四级) | 2017-07-30 14:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册