AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

1741C - Minimize the Thickness

作者: 作者的头像   MangoCat ,  2022-10-19 00:40:54 ,  所有人可见 ,  阅读 125


1


题目思路: 遍历区间长度,然后根据区间长度和 遍历时候存在答案然后记录最长的区间

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

const int N = 2010;

int nums[N];
int n;

int go(int i , int sum){

    // 表示已经找完了一次答案
    if(i == n) return 0;



    // 55 45 30 30 40 100
    for(int j = i + 1 , cur = 0 ; j <= n ; j++){
        cur += nums[j-1];
        // 不符合条件直接返回 数组长度
        if(cur > sum) return n;
        // 因为j -> i+1开始 两者的距离 是j-i
        if(cur == sum ) return max(j-i,go(j , cur));

    }

    return n;

}


int solve(){
    // 默认为整个数组长度
    int ans = n;

    // 遍历可能存在的长度
    for(int len = 1 , sum = 0 ; len < n ; len++){

        sum += nums[len-1];

        // 确定sum 后 遍历最后可能[l,r] 的和 == sum 的最长情况
        // 需要跟 ans取最小值 存在多种情况 划分的情况不一样
        ans = min(ans , go(0 , sum));

    }

    return ans;

}


int main(){

    int T;
    cin >> T;

    while(T--){


        cin >> n;
        //读入整个数组
        for(int i = 0 ; i < n ; i++) cin >> nums[i];

        cout << solve() << endl;
    }

    return 0;
}

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息