Association for the Country of Mububa Kattis - mububa (DP)

题目链接:

https://cn.vjudge.net/problem/Kattis-mububa

题目大意:

给你n个箱子,每个箱子里面装着一定数量的香蕉,让你按照这个箱子的顺序分发这些香蕉;在每个人获得的香蕉是非递减的前提下,最多能分多少个人?

具体思路:

dp[i]表示以第i个为结尾的这个人拿多少的香蕉是最合适的。

num数组记录人数。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 # define inf 0x3f3f3f3f
 4 # define ll_inf (1ll<<60)
 5 # define ll long long
 6 # define lson l,mid,rt<<1
 7 # define rson mid+1,r,rt<<1|1
 8 const ll maxn = 3e5+100;
 9 const ll mod = 1e9+7;
10 ll dp[maxn];
11 ll pre[maxn];
12 ll num[maxn];
13 int main()
14 {
15     int n;
16     scanf("%d",&n);
17     ll tmp;
18     for(int i=1; i<=n; i++)
19     {
20         scanf("%lld",&tmp);
21         pre[i]=pre[i-1]+tmp;
22     }
23     for(int i=1; i<=n; i++)
24     {
25         for(int j=i-1; j>=0; j--)
26         {
27             if(pre[i]-pre[j]>=dp[j])//  这里找到之后停了就可以了;假设最优解在前面,那么这个点的后面也一定能符合的,因为是越加越多的
28             {
29                 dp[i]=pre[i]-pre[j];
30                 num[i]=num[j]+1;
31                 break;
32             }
33         }
34     }
35     printf("%lld\n",num[n]);
36     return 0;
37 }

 

转载于:https://www.cnblogs.com/letlifestop/p/11002174.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值