hdu_1257_贪心_模拟_最小拦截系统

3 篇文章 0 订阅

气cry~,思路完全正确,但因为实现时的一系列小问题,花了将近半个小时才A掉。

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1257

思路:每当有导弹来临时:

 ①如果没有任何当前的系统可以达到导弹的高度,则在拦截数组里新增一个,并且最大打击高度为导弹高度。

②如果有能达到导弹高度,则找到最接近导弹的这一点(可以使浪费的高度最小),并将导弹高度赋值给它。

现在看来用sort排序做到这一点会更好。

出现问题:

①在寻找最接近点时,一是没有注意变量的有效性,二是传送参数时出现错误,导致数组越界。

②注意是:s[find_close(height)]=height,而不是s[find_close(height)]-=height;出现这个错误是因为之前做的题让自己潜意识里少了判断。

代码如下:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=1000;
int s[maxn];
int n,m;

int find_close(int target)
{
    int minu=99999;
    int j;//一定要注意变量的有效性问题。
    for(int i=0;i<n;i++)
    {
        int num=s[i]-target;
    if(num>=0 && num<=minu)
            {j=i;minu=num;}
    }
    return j;
}
int main(void)
{
    int i,j,k;
    int height;
    while(cin>>n)
    {
        if(n==0) break;
        memset(s,0,sizeof(s));
        int cnt=0;
        for(i=0;i<n;i++)
        {
            cin>>height;
            bool flag=false;
            for(j=0;j<n;j++)
            {
                if(s[j]>=height) flag=true;
            }
            if(!flag) s[cnt++]=height;
            else s[find_close(height)]=height; //更新可以达到的打击高度

        }
        cout<<cnt<<endl;//数组为0—cnt-1,恰好有cnt个
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值