div2 .c

Posted 钟钟终

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了div2 .c相关的知识,希望对你有一定的参考价值。

https://codeforces.com/contest/1526/problem/C1

stl容器:
1.采用优先队列,将队列中最小值放到队首。
2.由于题目要求,在满足累加值大于等于0的情况下,能喝的最大药剂数量。
3.如果出现负数,减去队列中最小值,则必然为正。
4.最后队列的大小就是最大数量。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[2005];
priority_queue<ll,vector<long long>,greater<ll> > q;

int main()
{
    int n;cin>>n;
    for(int i=1;i<=n;i++)
    {
            cin>>a[i];
    }
    ll sum=0;
    for(int i=1;i<=n;i++)
    {
        sum+=a[i];
        q.push(a[i]);
        if(sum<0)
        {
            sum-=q.top();
            q.pop();
        }
    }
    cout<<q.size()<<endl;
    return 0;
}

采用DP方法:

void work(){
	ans=0;
	cin>>n;
	for(ll i=1;i<=n;i++) 
	    cin>>a[i];
	memset(f,-1,sizeof(f));
	for(ll i=0;i<=n;i++)
	            f[i][0]=0;
	for(ll i=1;i<=n;i++){
		for(ll j=1;j<=i;j++){
			if(f[i-1][j-1]>=0) 
			      f[i][j]=max(f[i-1][j-1]+a[i],f[i][j]);
			if(f[i-1][j]>=0) 
			       f[i][j]=max(f[i][j],f[i-1][j]);      //类似最长子序列
		}
	}
	for(ll j=0;j<=n;j++) if(f[n][j]>=0) ans=j;
	cout<<ans<<endl;
}
 

以上是关于div2 .c的主要内容,如果未能解决你的问题,请参考以下文章

cf386(div2)大一狗ACM之路

CF#345 div2 A\B\C题

CFRound #618 div2 C(文末有技巧)

CodeFroces-- 514.div2.C-Sequence Transformation

CF-503div2-A/B/C

codeforces 349 div2.c