easy cut problem

Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description

在序列中将a[i]和a[i+1]切割开的花费为abs ( a[i] - a[i+1] ) ,现在要使切割后的每一段中的奇数和偶数数量相等,问总花费不超过m的最大切割次数,保证序列中的奇数与偶数数量相等。
Input

n,m。代表序列长度与最大花费。

第二行n个正整数表示序列。

1 < n , m <=100
Output

一个整数代表最大切割次数。
Sample Input

6 100
1 2 3 4 5 6

Sample Output

2

Hint

对于样例,应该在2和3中间,4和5中间分别切割一次,切割后变成12,34,56,对于第一块中的数字,奇数个数和偶数个数都为1,此符合题目要求,第二块第三块同理。

2和3中间的切割花费为abs(2-3),

4和5中间的切割花费为abs(4-5),

花费总额为2小于最大总花费。
Source
行走的二叉树

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    int num1=0,num2=0;
    int num=0;
    int a[110],b[110];
    for(int i=0; i<n; i++)
    {
        cin>>a[i];
    }
    for(int i=0; i<n-1; i++)
    {
        if(a[i]%2==0)
        {
            num1++;
        }
        else
        {
            num2++;
        }
        if(num1==num2)
        {
            b[num++]=fabs(a[i]-a[i+1]);
        }
    }
    sort(b,b+num);
    int sum=0;
    int ans=0;
    for(int i=0; i<num; i++)
    {
        if(sum+b[i]<=m)
        {
            sum+=b[i];
            ans++;
        }
    }
    cout<<ans<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43820242/article/details/88081802