zoukankan      html  css  js  c++  java
  • A 蚂蚁觅食

    A. 蚂蚁觅食(一)

    单点时限: 1.0 sec

    内存限制: 512 MB

    一只饥饿的小蚂蚁外出觅食,幸运的小蚂蚁发现了好多食物,但是它只有一次搬食物的机会。
    可因为力气太小了,它不能搬走重量超过自己体重的食物,且只能搬走位置相邻的两个食物,或者只搬走其中一个。
    食物的位置不会改变。
    这可难住了这只蚂蚁,它不知道它最多能搬走多重的食物。请帮小蚂蚁计算。

    输入格式

    第一行一个正整数n(n>=0n<=1000)

    第二行n个正整数 A[1].....A[n]A[i] 表示在第i 个位置上食物的重量。A[i]<=1e9.

    第三行一个正整数m,表示蚂蚁的体重。(m<=1e9).

    输出格式

    一个整数表示小蚂蚁能带走的食物的重量。

    样例

    input
    3
    1 3 3
    4
    
    output
    4
    蚂蚁一次只能带走一个东西或者是带走相邻的个东西。所以思路有很多:
    第一种思路:构造一个数组,用来存储相邻两项的和,然后找到第一个小于等于m的数并记为ans1.然后如果一次就取一个的话,找到第一个小于等于m的数字,几位ans2,,然后输出较大的
    AC代码:
    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    ll arr[1000+10];
    ll arr1[1000+10];
    int main(){
        ll n;
        cin>>n;
        ll a=0;
        
        for(int i=1;i<=n;i++){
            cin>>arr[i];
        }
        
        ll m;
        cin>>m;
        
        ll pos=0;
        for(int i=2;i<=n;i++){
            arr1[pos++]=arr[i]+arr[i-1];
        }
        
        ll ans1=0,ans2=0;
        
        sort(arr+1,arr+1+n);
        
        for(int i=n;i>=1;i--){
            if(arr[i]<=m){
                ans1=arr[i];
                break;
            }
        }
        
        sort(arr1,arr1+pos);
        
        for(int i=pos-1;i>=0;i--){
            if(arr1[i]<=m){
                ans2=arr1[i];
                break;
            }
        }
        cout<<max(ans2,ans1)<<endl; 
        return 0;
    }

    思路2:便利每个元素,,如果能装的下判断能不能和下一个一起装,可以的话就装上。

    AC代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    ll arr[1000+10];
    int main(){
        int n;
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>arr[i];
        }
        ll m;
        cin>>m;
        ll ans=0;
        for(int i=0;i<n;i++){
            if(arr[i]>m){
                continue ;
            }
            else if(arr[i]==m){
                ans=m;
                break;
            }
            else{
                if(arr[i]+arr[i+1]<m){
                    ans=max(ans,arr[i]+arr[i+1]);
                }
                else if(arr[i]+arr[i+1]==m){
                    ans=m;
                    break;
                }
                else{
                    ans=arr[i];
                } 
            }
        }
        cout<<ans<<endl;
  • 相关阅读:
    cmanformat
    mysql-sql语言参考
    jQuery 判断多个 input checkbox 中至少有一个勾选
    Java实现 蓝桥杯 算法提高 计算行列式
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
  • 原文地址:https://www.cnblogs.com/Accepting/p/11296896.html
Copyright © 2011-2022 走看看