IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 寒假每日一题(提高组)【Week 4 完结】 -> 正文阅读

[数据结构与算法]寒假每日一题(提高组)【Week 4 完结】

730. 机器人跳跃问题【二分】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int h[N],n;
bool check(long long int mid)
{
    for(int i=1;i<=n;i++)
    {
        mid=mid*2-h[i];
        if(mid<0) return false;
        if(mid>1e9) return true;
    }
    return true;
}
int main(void)
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>h[i];
    int l=0,r=1e6;
    while(l<r)
    {
        int mid=l+r>>1;
        if(check(mid)) r=mid;
        else l=mid+1;
    }
    cout<<l<<endl;
    return 0;
}

3195. 有趣的数【DP 组合树】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
const int mod=1e9+7;
typedef long long int LL;
LL c[N][N],n;
int main(void)
{
    cin>>n;
    for(int i=0;i<=n;i++)
    {
        for(int j=0;j<=i;j++)
        {
            if(j==0) c[i][j]=1;
            else c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
        }
    }
    LL res=0;
    for(int k=2;k<=n-2;k++)
       res=(res+c[n-1][k]*(k-1)%mod*(n-k-1))%mod;
    cout<<res;
    return 0;
}

3205. 最优配餐【多源最短路】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int g[N][N],n,m,k,d;
int dist[N][N];
struct node{int x,y,c;};
vector<node>ve;
queue<node>q;
void bfs()
{
    int dx[4]={-1,0,0,1},dy[4]={0,-1,1,0};
    while(q.size())
    {
        auto temp=q.front(); q.pop();
        int x=temp.x,y=temp.y;
        for(int i=0;i<4;i++)
        {
            int tempx=x+dx[i];
            int tempy=y+dy[i];
            if(tempx<=0||tempx>n||tempy<=0||tempy>n) continue;
            if(g[tempx][tempy]) continue;
            if(dist[tempx][tempy]>dist[x][y]+1)
            {
                dist[tempx][tempy]=dist[x][y]+1;
                q.push({tempx,tempy,0});
            }
        }
    }
}
int main(void)
{
    memset(dist,0x3f,sizeof dist);
    cin>>n>>m>>k>>d;
    while(m--)
    {
        int x,y; scanf("%d%d",&x,&y);
        q.push({x,y,0});
        dist[x][y]=0;
    }
    while(k--)
    {
        int x,y,c; scanf("%d%d%d",&x,&y,&c);
        ve.push_back({x,y,c});
    }
    while(d--)
    {
        int x,y; scanf("%d%d",&x,&y);
        g[x][y]=1;
    }
    bfs();
    long long int sum=0;
    for(int i=0;i<ve.size();i++) sum+=1ll*dist[ve[i].x][ve[i].y]*ve[i].c;
    cout<<sum<<endl;
    return 0;
}

3215. 网络延时【树的直径】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*2+10;
int h[N],e[N],ne[N],idx;
int n,m,ans=0;
void add(int a,int b)
{
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int dfs(int u)
{
    int d1=0,d2=0;//最长路 次长路
    for(int i=h[u];i!=-1;i=ne[i])
    {
        int j=e[i];
        int d=dfs(j);
        if(d>=d1) d2=d1,d1=d;
        else if(d>d2) d2=d;
    }
    ans=max(ans,d1+d2);
    return d1+1;
}
int main(void)
{
    memset(h,-1,sizeof h);
    cin>>n>>m;
    for(int i=2;i<=n+m;i++)
    {
        int x; cin>>x;
        add(x,i);
    }
    dfs(1);
    cout<<ans;
    return 0;
}

3250. 通信网络【思维 图】

在这里插入图片描述
如果一个点A可以到达的点有s1个,有s2个点可以到达A。且s1+s2==n则这就是一个所求的点。
故可以建立反向边。这样就可以逆着求那些点可以到达它

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int h1[N],h2[N],ne[N],e[N],idx;
int n,m,st1[N],st2[N];
void add(int h[],int a,int b)
{
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u,int h[],int st[])
{
    st[u]=1;
    for(int i=h[u];i!=-1;i=ne[i])
    {
        int j=e[i];
        if(!st[j]) dfs(j,h,st);
    }
}
int main(void)
{
    memset(h1,-1,sizeof h1);
    memset(h2,-1,sizeof h2);
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        int a,b; cin>>a>>b;
        add(h1,a,b),add(h2,b,a);
    }
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        memset(st1,0,sizeof st1);
        memset(st2,0,sizeof st2);
        dfs(i,h1,st1);
        dfs(i,h2,st2);
        int cnt=0;
        for(int j=1;j<=n;j++) if(st1[j]||st2[j]) cnt++;
        if(cnt==n) ans++;
    }
    cout<<ans;
    return 0;
}

3240. 压缩编码【区间DP】

在这里插入图片描述
猛的一看以为是哈夫曼树,直接合并任意俩点。但是题目要求字典序递增。
这其实就是暗示每次合并只可以合并相邻的点。

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int f[N][N],n,s[N];
int main(void)
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>s[i],s[i]+=s[i-1];
    for(int len=2;len<=n;len++)
    {
        for(int i=1;i+len-1<=n;i++)
        {
            int l=i,r=i+len-1;
            f[l][r]=1e9;
            for(int k=l;k<r;k++)
            {
                f[l][r]=min(f[l][r],f[l][k]+f[k+1][r]+s[r]-s[l-1]);
            }
        }
    }
    cout<<f[1][n];
    return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:55:08  更:2022-02-26 12:00:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:59:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码