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;
  • 相关阅读:
    界面间传值
    消息通知中心
    ios外部链接或者app唤起自己的app
    iOS跳转第三方应用举例一号店和京东
    ios 传递JSON串过去 前面多了个等号
    react-native 配置 在mac 上找不到.npmrc
    webView 获取内容高度不准确的原因是因为你设置了某个属性
    WKWebView 加载本地HTML随笔
    关于attibutedText输出中文字符后的英文和数字进行分开解析的问题
    iOS 企业包碰到的问题
  • 原文地址:https://www.cnblogs.com/Accepting/p/11296896.html
Copyright © 2011-2022 走看看