飞扬的小鸟

飞扬的小鸟

https://ac.nowcoder.com/acm/problem/16496

做法:dp

思路:

  • 1.先用结构体把每个横坐标的情况记录下来
  • 2.dp[i][j]表示到坐标(i,j)最少需要跳的次数
  • 3.考虑上升转移和下降转移,其中上升转移要考虑到顶这种特殊情况

代码

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp(aa,bb) make_pair(aa,bb)
#define _for(i,b) for(int i=(0);i<(b);i++)
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,b,a) for(int i=(b);i>=(a);i--)
#define mst(abc,bca) memset(abc,bca,sizeof abc)
#define X first
#define Y second
#define lowbit(a) (a&(-a))
typedef long long ll;
typedef pair<int,int> pii;
typedef unsigned long long ull;
typedef long double ld;
const int N=10010,M=1010;
const int INF=0x3f3f3f3f;
const int mod=1e9+7;
const double eps=1e-6;
const double PI=acos(-1.0);

int n,m,k;
struct node{
    int x,y,minh,maxh;
    bool st;
}a[N];
int dp[N][M<<1]; //dp[i][j]:到坐标(i,j)最少需要跳的次数
int ans=INF;

void solve(){
    cin>>n>>m>>k;
    rep(i,1,n) {
        cin>>a[i].x>>a[i].y;
        a[i].minh=0,a[i].maxh=m+1;
    }
    while(k--){
        int p,l,h;
        cin>>p>>l>>h;
        a[p].minh=l,a[p].maxh=h,a[p].st=1;
    }
    mst(dp,INF);
    rep(i,1,m) dp[0][i]=0;
    rep(i,1,n){
        rep(j,1,m) dp[i][j+a[i].x]=min(dp[i-1][j]+1,dp[i][j]+1);
        rep(j,m+1,m+a[i].x) dp[i][m]=min(dp[i][j],dp[i][m]);//到顶 
        rep(j,1,m-a[i].y) dp[i][j]=min(dp[i][j],dp[i-1][j+a[i].y]);
        rep(j,1,a[i].minh) dp[i][j]=INF;
        rep(j,a[i].maxh,m) dp[i][j]=INF;
    }
    rep(i,1,m) ans=min(ans,dp[n][i]);
    if(ans<INF){
        cout<<"1\n"<<ans<<"\n";
        return;
    }
    cout<<"0\n";
    int i,j,num=0;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            if(dp[i][j]<INF) break;
        }
        if(j==m+1) break;
        if(a[i].st) num++;
    }
    cout<<num<<"\n";
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
#ifdef DEBUG
    freopen("F:/laji/1.in", "r", stdin);
//    freopen("F:/laji/2.out", "w", stdout);
#endif
//    int t;cin>>t;while(t--)
    solve();
    return 0;
}
牛客每日一题 文章被收录于专栏

全部评论

相关推荐

鸿雁于飞:1. 求职定位乱成一锅粥,直接劝退HR 你期望职位同时写了「项目经理/技术经理/交付经理」,这仨岗根本不是一个赛道!项目经理玩流程和干系人,技术经理玩架构和带技术团队,交付经理玩客户和回款,你仨全堆上,HR直接判定「这人自己都不知道自己要干啥,没核心竞争力」,直接扔简历。 ​ 2. 2年多的职业空窗期,一个字不提,纯纯自杀行为 金融行业最看重职业连贯性和背景干净,你2018年5月到2020年8月,整整2年3个月没上班,啥说明都没有!HR直接脑补你是不是有竞业限制、是不是创业失败、是不是有啥背调过不了的问题,直接不敢往下看,首轮就给你筛了,这是最致命的坑! ​ 3. 工作经历纯纯摆烂,干货全藏起来了 你每段工作就写个公司、职位、时间,干了啥、带了多大团队、出了啥核心成果、给公司赚了/省了多少钱,一个字没有,全堆到后面的项目里了。HR看简历就3秒,第一眼看不到你每段工作的价值,直接就划走了,根本不会翻你后面的项目。 ​ 4. 项目经验像个大杂烩,还全是bug 你堆了快10个项目,银行、证券、公安、政务、日本项目啥都有,跟个杂货铺一样,HR根本看不到你的核心优势在哪。而且项目连个起止时间都不写,谁知道你这是最近的标杆项目,还是10年前刚入行干的活?还有数据前后矛盾,一会说「零事故交付」,一会说「生产事故率降低50%」,HR一看就觉得你瞎包装,根本不信。 ​ 5. 15年经验的经理岗,还在写一线拧螺丝的活,层级完全错配 你都应聘经理级岗位了,简历里还在写自己写接口、写测试脚本、做前端开发这些一线执行的活,完全没写你怎么搭建管理体系、怎么带团队、怎么搞定甲方、怎么控项目风险、怎么拿经营结果,MBA的价值一点没体现出来。HR看完直接觉得:合着你干了15年,还是个高级开发,根本达不到经理岗的要求,直接pass。 ​ 6. AI风口完全没抓住,写了句空话等于没写 现在全行业都在卷AI+金融,人家招管理岗,都要能落地AI场景的人。你就写了句「深化Transformer与大模型底层技术研习」,纯纯空话,一点实际落地成果都没有,跟其他候选人比,完全没差异化优势,人家凭啥放着年轻能落地的不要,要你这个只学了理论的? 姐好好看看,然后改改简历吧,要专,要精,然后降低求职目标。希望你能早日拿到offer
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务