贪心
INF菜
思路决定出路
展开
-
D. Matryoshkas
Codeforces Round #847 (Div. 3) D. Matryoshkas原创 2023-02-01 18:32:54 · 205 阅读 · 0 评论 -
D. PriceFixed
D. PriceFixed题目连接????题目大意商店有n件商品,第i件商品,你需要买a[i]件,而第i件商品打折的够满b[i]件,问你怎样才能花最少的钱购买思路要求数少的,打折肯容易,要求数大的肯定难打折,那么贪心的去选取,先对需求非递减排个序,然后枚举如果当前的购买数满足打折条件那么就贪心买当前的商品,否则就拿后面的商品和当前的还需多少件商品数,取min,然后修改后面的值,这样能得到最优解代码#include <bits/stdc++.h>using namespace st原创 2021-06-23 16:50:54 · 380 阅读 · 2 评论 -
C. Parsa‘s Humongous Tree
C. Parsa’s Humongous Tree题目链接????题目大意给你一棵树,每个结点有一个权值范围,相邻结点有可以计算差值,要求求出这些差值绝对之和的最大值。思路要想拿到最大值,肯定是取边界值,边界的组合方式有四种a左a_左a左-b左b_左b左,a右a_右a右-b左b_左b左,a左a_左a左-b右b_右b右,a右a_右a右-b右b_右b右,这四种情况的绝对值,而没每次拿的值是固定的,那么转移方程式也就只有两种情况,一种是a结点只取左边界值dp[0]状态,另一种是a结点只取原创 2021-05-26 13:51:22 · 174 阅读 · 2 评论 -
D - aab aba baa
D - aab aba baa题目链接????题目大意给你a个a,b个b,要求你输出按字典序排列第k个的字符串思路给你a个a,b个b总共n=a+b个字符,那么有多少种排列方式,是不是∁na\complement^a_n∁na,那么每次判断能不能放a,如果排列的最大值小于k,那么只能放b,同时要修改k的值,否则就放入a,同时在放入时要修改ab的剩余数量。通过代码#include <bits/stdc++.h>#define ll long long#define fi firs原创 2021-05-24 13:33:01 · 223 阅读 · 0 评论 -
D. Dragon Balls
题目链接????2020-2021 ICPC Northwestern European Regional Programming Contest (NWERC 2020)D. Dragon Balls题意给你n个球要求你在1000次询问以内找出球的位置。思路首先我们肯定从原点开始询问,如果给出的距离不是0,那么你就继续询问,我们每次只找当前的小球,当你给出小球距离的原点的距离时,那么你就找和原点距离给给出值一样的点,然后记录这些点,每次询问这些点的位置距离是否为零,这样肯定能找到。#incl原创 2021-05-10 14:39:07 · 198 阅读 · 0 评论 -
E. Arranging The Sheep
E. Arranging The Sheep题目????题目大意给你一行字符串,要求你使用最少的移动次数使得所有的‘*’排在一起。思路只有选择这些‘*’中的中间位置才能使得移动最小,中位数的性质,所以你从中间的那个符号开始,一个往前找差值,一个往后找差值,主机在算距离时,移动的符号受前面的符号影响。通过代码#include <bits/stdc++.h>#pragma GCC optimize("Ofast")#pragma GCC target("avx,avx2,fma")原创 2021-05-06 20:36:15 · 176 阅读 · 0 评论 -
C. Phoenix and Towers
C. Phoenix and Towers题目链接题目大意给你n块石头每块高为hi,要求搭成m座塔,并且任意两座塔的高度之差不会超过x。问是否可行,如过可以将对应的石头划分到一个下标中。思路题目给的数据范围就可以说明一定可以搭成的,每块石头都小于差x,那么总存在组合使得其差不会超过x,那么如何组合,将每块的高度存放于set中这样每次访问时,就可以先访问小的元素,每次取出首元素,删除首元素,之后将输入的ai之和压入set中,这样可以让访问到的元素差值尽可能的小通过代码#include <b原创 2021-05-03 13:01:47 · 557 阅读 · 1 评论 -
D. Maximum Sum of Products
D. Maximum Sum of Products题目链接题目大意给你两个长度均为n的序列a,b,要求你只能修改a的一个连续区间使其反转且至多一次,使得 ∑i=1n\displaystyle\sum_{i=1}^ni=1∑na[i]*b[i]的值最大。思路首先我们先求出序列的和最大值是多少,然后在修改时,我们记录修改前后的差值的最大值,就可以了,那么怎么记录呢,反转是一个连续的区间,所以我们可以先从连续区间的最小值开始反转,然后一层向两边拓展,每次记录一个差值的最大值,然后当前状态是由上一个状原创 2021-05-01 18:45:35 · 212 阅读 · 0 评论 -
C. Berland Regional
C. Berland Regional题目链接题目大意有多个学校,每个学校若干名学生,每个学生有不同的能力,要求每个队人数有k(k>=1&&k<=n)的限制,只有当每个队人数为k时,才能派出比赛,问在不同人数下,能力值总和最大为多少?思路能力值高者优先派出,所以从大到小排个序,然后用每个学校的队员数模一个队的人数,有余数就不派倒数的几个人去。这样可以的到最优解。通过代码#include <bits/stdc++.h>#pragma GCC optimi原创 2021-05-01 18:27:58 · 331 阅读 · 0 评论 -
C. Fillomino 2
C. Fillomino 2题目链接题目大意给你一个数n,表示一个n*n的矩阵,然后输入对角线上的元素,问你能否建立一个只有主对角线以下元素的矩阵输出,每个相同元素必须连通,每个元素的个数必须等于该元素值的大小思路这样的矩阵一定是存在的,因为元素个数和矩阵的能容纳的元素相等,那么如何构建呢,每次主对角线上元素开始,能往左构建尽量往左构建,当到了左边界时,然后一直向下面构建,当到到达底部时,就一直向有右构建,这样构建是最优的,因为这个对角线上的元素最低可能的影响下一个对角线上的元素。通过代码#i原创 2021-04-24 13:06:05 · 543 阅读 · 0 评论 -
C. The Sports Festival
C. The Sports Festival题目连接题目大意给你一个长度为n的序列,要求然你找到一种排列使得在前i个数中最大值与最小值差的总和最小思路怎样拿才是最小的拿法呢,先将原序列排序之后进行区间dp,最小和是由区间长度从1~n变化来的,那么从1开始,以1为长度滑动串窗口,找到长度为中区间元素差值最小值,为什么取相邻元素呢,因为这个序列已经排好序了,那么肯定是相邻元素差值最小,然后在长度是2的最小值,长度为2的最小值是由长度是的最小变化而来,而为2的区间有两种变化方法,dp[当前位置][当前位原创 2021-04-19 17:01:50 · 60 阅读 · 0 评论