zoukankan      html  css  js  c++  java
  • ai变成bi(递增)最小次数

    Description

    给出一个长度为N的序列,现在可以进行魔法操作,对于任意一个位置i,你可以将ai变为bi。光光比较喜欢单调递增的序列,请你输出最少的使用魔法次数,若不可能,输出-1。

    Input

    一个整数N

    接下来一行N个数:ai代表原数组的数

    接下来一行N个数:bi代表原数组使用魔法后的数字。

    aibi

    Output

    一个整数

    Samples

    Input 复制
    3
    1 3 2
    2 1 4
    Output
    1

    Hint

    将最后一个位置的2变为4 ,原序列 = [1,3,4]

    Source

    2021年昆明区域赛选拔【DP】
     
    这个题就是dp[i][0]代表的是这个数不变成b[i],dp[i][1]代表的是变成b[i]
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn=1e6+100;
    int a[maxn],b[maxn];
    int dp[maxn][2];
    int main(){
        int n;
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i]; 
        }
        for(int i=1;i<=n;i++){
            cin>>b[i];
        }
        memset(dp,0x3f3f3f3f,sizeof(dp));
        dp[1][1]=1;
        dp[1][0]=0;
        for(int i=2;i<=n;i++){
            if(a[i]>a[i-1]){
                dp[i][0]=min(dp[i][0],dp[i-1][0]);
            }
            if(a[i]>b[i-1]){
                dp[i][0]=min(dp[i][0],dp[i-1][1]);
            }
            if(b[i]>a[i-1]){
                dp[i][1]=min(dp[i][1],dp[i-1][0]+1);
            }
            if(b[i]>b[i-1]){
                dp[i][1]=min(dp[i][1],dp[i-1][1]+1);
            }
        }
        if(dp[n][0]==0x3f3f3f3f&&dp[n][1]==0x3f3f3f3f){
            cout<<-1<<endl;
        }
        else{
            cout<<min(dp[n][0],dp[n][1])<<endl;
        }
    }
  • 相关阅读:
    [SIP]SIP之穿越NAT 幻灯片
    此Slashdotcn模仿彼Slashdot
    [RTC]如何得到Interop.RTCCore.dll
    androidmanifest.xml权限中文说明
    Android Service学习之本地服务
    从问题看本质:socket到底是什么?
    Android小项目之服务【Service】
    listen函数
    Android开发资源完全汇总
    ANDROID基础知识普
  • 原文地址:https://www.cnblogs.com/lipu123/p/14489022.html
Copyright © 2011-2022 走看看