GDUT 寒假排位赛一

感想:过个年10多天没刷题,一开始连签到题都不是很顺利,而且一开始作死开了D题,结果全场有D,F两道题没人过,结果排在了3题尾,哭死。但这不是理由,最重要的原因是自己菜,而且寒假第一阶段所学的知识点还不会运用,因为寒假第一阶段是专题训练,每道题都有说考察什么知识点,而且这次排位赛E题考二分,我却想不到二分做,I题考优先队列,我却一直卡在那里,一直想模拟过程,B题考DP,我却一直想贪心,根本没有想到状态转移,C题却嫌麻烦,不想模拟,所以放弃。最终只做完三道签到题,被rank1差点7题的lyr大佬无情的锤爆
总而言之,题还是刷的比较少,不懂得系统的总结加以应用,好多只知道知识点,却不会应用到题目中去
题目链接】:http://codeforces.com/group/NVaJtLaLjS/contest/238166

A.The Bucket List(签到题)
题意:给定N只奶牛,每只奶牛开始挤奶时间以及结束时间分别为s与t,以及每只奶牛在挤奶时间需要b只桶,问最多需要多少只桶?
思路:(由于题目数据1<= s,t <=1000,且保证在某个时刻只有一只奶牛开始挤奶或者结束挤奶,所以直接暴力就行)
复杂度O(1000)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[1005],b[1005];
int main()
{
   
    int n,s,e,c;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
   
        cin>>s>>e>>c;
        a[s]=b[e]=c;
    }
    int cnt=0,tmp=0,i;
    for(i=1;i<=1000;i++)
    {
   
        if(a[i]){
   
            if(a[i]<=tmp)
            tmp-=a[i];
            else{
   
            cnt+=(a[i]-tmp);
            tmp=0;
            }
        }
        if(b[i])
        {
   
            tmp+=b[i];
        }
    }
    cout<<cnt<<endl;
    return 0;
}

B. Teamwork(dp)
题意: 给定n只奶牛,每只奶牛有一个技能点,把1-n只奶牛连续分成多组,每组奶牛不超过k只,每只奶牛只能存在一组,且该组的奶牛技能点都会升高到与组里某只奶牛最高技能点一样,如何分配,求得n只奶牛总的技能点最大
思路: dp,dp[i]表示前i只奶牛总的最大技能点,而且第i只奶牛会会受到前面k只奶牛影响,复杂度O(n*k)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[10005],dp[10005];
int main()
{
   
    int n,k;
    ll sum=0;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=n;i++)
    {
   
        int maxx=-1;
        for(int j=1;j<=min(i,k);j++)
        {
   
            maxx=max(maxx,a[i-j+1]);
            dp[i]=max(dp[i],dp[i-j]+maxx*j);
        }
    }
    cout<<dp[n]<<endl;
    return 0;
}

C. Mooyo Mooyo(联通块dfs+简单模拟)
题意: 有点类似于消消乐,如果相邻同颜色的超过k块,就消去,消完后,若底下为空,由于重力会掉下去,问最后无法可消去后的方阵
思路: 先dfs一次求得各自相邻同颜色的方块数,若是满足>=k,则再dfs一次消去,接着模拟掉落过程,记住在地图mp[ ][ ]最底层为第n行,而不是第0行,模拟时不要写错,重复以上操作,直到符合条件结束循环

#include<bits/stdc++.h>
using namespace std;
char mp[105][15],vis[105][15];
int n,k,cnt;
int dis[4][2]=
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值