zoukankan      html  css  js  c++  java
  • D. Make The Fence Great Again

    题意:给n个木块的起始高度,还有每个木块加一高度的代价,求使每个木块相邻两边高度不同的最小代价。

    思路:设f[i][j],表示判断到第i个木块,第i个木块增高j所需的最小代价,可知,每个木块因为相邻两个木块,所以每个木块只需要增高0,1,2这三种可能,做法就是相当于暴力枚举加记忆化了。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    const int maxn=3e5+10;
    int a[maxn];
    int v[maxn];
    ll f[maxn][3];
    int main()
    {
        int t,n;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(int i=1; i<=n; i++)
                scanf("%d%d",&a[i],&v[i]);
    
                for(int i=1; i<=n; i++)
                    for(int j=0; j<3; j++)
                        f[i][j]=1e18;
            f[0][0]=f[0][1]=f[0][2]=0;
            for(int i=1; i<=n; i++)
            {
                for(int j=0; j<3; j++)
                    for(int k=0; k<3; k++)
                    {
                        if(a[i-1]+j!=a[i]+k)
                        {
                            f[i][k]=min(f[i][k],f[i-1][j]+k*v[i]);                        
                        }
                    }
            }
            printf("%lld
    ",min(min(f[n][0],f[n][1]),f[n][2]));
        }
    
    }
  • 相关阅读:
    sql server中count(*),count(col),count(1)的区别
    oracle 存储过程(1)
    Java线程:概念及原理
    H2 应用实例2
    H2 应用实例1
    H2 database 应用
    H2 database 操作操作内存表
    JDK 环境变量配置
    MySQL CREATE TRIGGER (1)
    MySQL 事务1
  • 原文地址:https://www.cnblogs.com/dongdong25800/p/11566635.html
Copyright © 2011-2022 走看看