15.. : 桃子

题目描述

淘淘和蓝蓝在星际旅行时来到了瓦尔登星,他们们遇到了这里的原住精灵,决定将飞船里的桃子分给他们一些。精灵一共有 N 只,编号为 1 到 N,第 i 只精灵需要吃 Ai 个桃子。现在每只精灵会按 1到 N 的顺序领取桃子,每只精灵可选择淘淘和蓝蓝中的一个人,并向他讨要桃子。但精灵们也会有情绪,假设前面和自己选了同一个人的精灵讨要到的桃子的最大个数是 x,如果 x 大于自己的需求 Ai,那么这个精灵会产生 x-Ai 的不开心值;如果 x 不大于自己的需求 Ai,那么这个精灵不会产生不开心值。淘淘和蓝蓝想让所有精灵的不开心值总和最小,他们想问你这个总和的最小值是多少?

输入

第一行一个整数 N,表示精灵个数。
第二行 N 个整数,第 i 个整数 Ai,表示第 i 只精灵需要吃的桃子数。

输出

一行一个整数表示最小的不开心值总和。

样例输入

5
5 3 4 6 2

样例输出

2

数据范围限制

对于 30%的数据 满足 N<=5
对于另外 10%的数据,满足所有的 Ai 均相等
对于另外 10%的数据,满足 Ai=i
对于 100%的数据,满足 N<=20,1<=Ai<=100000

#include<cstdio>
using namespace std;
int n,m,jk,k,l,p,a[10001]; 
int ans=999999;
void dg(int tao,int lan,int x,int y)
{
    if(x<ans&&y>n)
    {
        ans=x;
        return;
    }
    if(x>=ans||y>n)
        return;
   if(tao>a[y])
   dg(tao,lan,x+tao-a[y],y+1);
   else
   dg(a[y],lan,x,y+1);
   if(lan>a[y])
   dg(tao,lan,x+lan-a[y],y+1);
   else
   dg(tao,a[y],x,y+1);
}
int main()
{
//    freopen("e.in","r",stdin);
//    freopen("e.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    dg(0,0,0,1);
    printf("%d",ans);
    return 0;
}

提示

一种总和最小的可能为:
第 1,4 只精灵选择淘淘,由于 5<6,它们都不会产生不开心值
第 2,3,5 只精灵选择蓝蓝,由于 4>2,第五只精灵会产生 4-2=2 的不开心值
总和为 2 

枚举就行

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值