1 条题解

  • 0
    @ 2025-8-24 22:40:59

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar liuyi0905
    同学或橙名及以上且不fake私信互关

    搬运于2025-08-24 22:40:59,当前版本为作者最后更新于2023-04-21 20:17:05,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目大意:

    共有 nn 张卡片,若报到的数与卡片上的数相同,那么就可以拿走这张卡片,求能拿走卡片之和的最大值。

    看到这道题,可以先把起点枚举一遍,再定义一个报数器,算出所有情况的最大值。

    AC记录

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int n,a[101],maxn=0,maxi=0;
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    		maxn=max(maxn,a[i]);//先算出所有卡片的最大值
    	}
    	for(int i=1;i<=n;i++){
    		int f[101]={0},x=1,sum=0,j=i,m=n;
    		while(1){
    			if(f[j]==0){
    				if(x==a[j]){
    					sum+=a[j];
    					f[j]=1;
    					x=0;
    					maxi=max(maxi,sum);
    					m--;
    				}
    				x++;
    			}
    			if(x>maxn||m<=0)break;
            /*如果报数器大于所有卡片的最大值或卡片数量小于等于0,就结束循环*/    
    			j++;
    			if(j==n+1)j=1;
    		}
    	}
    	cout<<maxi;//输出所有起点的最大值
    	return 0;
    }
    

    完美撒花

    • 1

    信息

    ID
    5951
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者