首页 > 其他分享 >「Day 2—贪心问题&分治&前缀和」

「Day 2—贪心问题&分治&前缀和」

时间:2024-08-05 18:06:24浏览次数:14  
标签:node cnt 前缀 int 端点 ans include Day 贪心

贪心问题

定义

顾名思义,越贪越好。。。

习题

P1094 [NOIP2007 普及组] 纪念品分组

思路

简单来说:最少的+最多的,利用双指针。

代码
#include<algorithm>
#include<iostream>
using namespace std;

int w,n;
int p[30005];

int main(){
    cin>>w;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>p[i];
    }
    sort(p+1,p+n+1);
    int l=1,r=n,ans=0;
    while(l<=r){
        if(p[l]+p[r]<=w){
            l++;
            r--;
            ans++;
        }
        else{
            r--;
            ans++;
        }
    }
    cout<<ans<<"\n";
    return 0;
}

P1803 凌乱的yyy / 线段覆盖

思路

按照右端点进行排序,每次选择右端点,判断当前的右端点是否比下一个的左端点小,如果小,证明其需要更新。

代码
#include<iostream>
#include<algorithm>
using namespace std;

struct node{
    int x,y;
}p[1000005];
int n;
bool cmp(node x,node y){
    return x.y<y.y;
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>p[i].x>>p[i].y;
    }
    sort(p+1,p+n+1,cmp);
    int id=0,ans=0;
    for(int i=1;i<=n;i++){
        if(id<=p[i].x){
            id=p[i].y;
            ans++;
        }
    }
    cout<<ans<<"\n";
    return 0;
}

P1181 数列分段 Section I

思路

每次从前向后加,如果大于m,则更新为当前值,否则就加上。

代码
#include<iostream>
using namespace std;

int n,a[100005];
int ans=0,m,cnt=0;

int main(){

    cin>>n>>m;

    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(cnt+a[i]>m){
            ans++;
            cnt=a[i];
        }
        else cnt+=a[i];
    }
    cout<<++ans<<"\n";
    return 0;
}

标签:node,cnt,前缀,int,端点,ans,include,Day,贪心
From: https://www.cnblogs.com/To-Carpe-Diem/p/18343771

相关文章

  • 代码随想录算法训练营day04之字符串
    题目及链接:344.反转字符串541.反转字符串||卡码网54.替换数字151.翻转字符串里的单词卡码网55.右旋字符串28.找出字符串中第一个匹配项的下标459.重复的子字符串344.反转字符串太简单就不写了541.反转字符串||题意:给定一个字符串s和一个整数k,从字符串开头算起,每......
  • Day20 二叉树Part7 二叉搜索树的增删查
    目录任务235.二叉搜索树的最近公共祖先思路701.二叉搜索树中的插入操作思路450.删除二叉搜索树中的节点思路心得体会任务235.二叉搜索树的最近公共祖先给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。思路由于是二叉搜索树,所以可以利用其性质进行查找,即,只有......
  • Day 29 - 结营测试
    Problems.pdf\(08:00\)拿到题目,居然有\(\text{pdf}\)还断网,这次好玩。\(08:02\)看完\(\text{A}\)题,发现又是一眼题?\(08:06\)光速打完\(\text{A}\)题,简单过了一下大样例。\(08:20\)写了对拍,暴力居然比正解还难写。\(08:25\)就这吧,不管\(\text{A}\)了,开\(\text{B......
  • 代码随想录day20 || 235 二叉搜索树最近公共祖先,701 二叉搜索树插入,450,二叉搜索树删除
    235二叉搜索树最近公共祖先unclowestCommonAncestor(root,p,q*TreeNode)*TreeNode{ //本题相较于普通二叉树寻找最近公共祖先加了题设条件二叉搜索树,所以使用二叉搜索树特性 //如果root大于两个目标节点,那么目标都在root左子树 //如果root小于两个目标节点,那么目......
  • day1-Django笔记
    1.手动创建Django项目(初学则推荐)创建一个python虚拟环境>=3.61.win+r进入终端2.condaenvlist#查看有哪些虚拟环境3.condacreate--namepy36_netpython==3.6#创建一个python环境4.activate虚拟环境名#激活虚拟环境5.condadeactivate#退出虚拟环境安装dja......
  • day2-admin管理后台
    admin管理后台1.基于django初始化一个项目1.condaactivate虚拟名字#进入虚拟环境2.django-adminstartprojectblog#创建一个项目blog3.cdblog#进入blog项目文件夹中4.pythonmanage.pystartappapp的名字#创建一个app初始化数据库(django自带的sqlite)1.pythonma......
  • 「Day 1—递归问题」
    递归问题定义简洁来说就是一个函数不断调用自身的一个过程。习题汉诺塔问题思路对于这个经典的问题,我们考虑了使用递归的做法,由于盘子是在三个底座上来回辗转的,所以我们要确定起始座,辅助座,和目标座。我们专注于最下面的最大的那个盘子,先将盘子都放到辅助座上,等到只剩最大的,......
  • final关键字day08
    /*父类中的除了非私有的,非静态方法,构造方法,难道其他的方法都可以让子类重写吗?如果某一个方法不想子类重写,只能让子类使用java提供了以关键字:final最终的,不可变可以修饰类,成员变量,成员方法*//*final:最终的,不可变的可以修饰类,成员变量,成员方法......
  • Java学习-Day5
    一、标识符含义:Java标识符是用来命名类、变量、方法以及其他的编程元素的名字。标识符命名规则:标识符可以由字母,美元符号($)和下划线(_)组成。不能以数字开头。区分大小写:例如myVar 和 myvar 是两个不同的标识符。不能是关键字:例如 int , class,public 等。不能包含空格......
  • 继承与成员变量以及构造方法的关系day08
    继承与成员变量的关系:1、怎么寻找?子类方法中使用变量的规则是:(就近原则)1)先在方法内部寻找,若找到就直接使用2)方法内部找不到,去当前类的成员变量的位置上寻找,若找到就直接使用3)若当前类的成员变量的......