zoukankan      html  css  js  c++  java
  • poj 1260 Pearls 斜率优化dp

    这个题目数据量很小,但是满足斜率优化的条件,可以用斜率优化dp来做。

            要注意的地方,0也是一个决策点。


    #include <iostream>

    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int maxn=1e2+9;
    int dp[maxn];
    int a[maxn],p[maxn],sum[maxn];
    int que[maxn];


    bool chk1(int i,int j,int k)
    {
        return dp[j]-dp[i]<p[k]*(sum[j]-sum[i]);
    }


    bool chk2(int k,int j,int i)
    {
        return (dp[i]-dp[j])*(sum[j]-sum[k])<(dp[j]-dp[k])*(sum[i]-sum[j]);
    }


    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            memset(dp,50,sizeof(dp));
            sum[0]=0;
            int n;
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
            {
                scanf("%d %d",&a[i],&p[i]);
                sum[i]=sum[i-1]+a[i];
            }
            dp[0]=0;
            int front=1,end=0;
            que[++end]=0;
            for(int i=1;i<=n;i++)
            {
                while(front+1<=end&&chk1(que[front],que[front+1],i))
                front++;
                int j=que[front];
                dp[i]=dp[j]+(sum[i]-sum[j]+10)*p[i];
                while(front+1<=end&&chk2(que[end-1],que[end],i))
                end--;
                que[++end]=i;
            }
            printf("%d ",dp[n]);
        }
        return 0;
    }

  • 相关阅读:
    空值判断(is not null)
    http协议相关面试题
    Linux基本面试题。(感觉也就这几个了)
    1、了解django运行流程
    python笔试常见题
    selenium中一些可能用到的js操作
    元素判断
    二次封装
    关于在阿里云上面安装mysql遇到的一些问题。
    linux常用的一些基本命令
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3260277.html
Copyright © 2011-2022 走看看