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;
    }

  • 相关阅读:
    遮罩层代码
    get方法传递中文数据的时候如何进行转码
    Eclipse常用快捷键
    VS常用快捷键
    Java笔记10-Object包装类型字符串
    MySQL常用命令
    Oracle笔记3-高级查询
    Oracle笔记2-数据库设计
    Java笔记9-正则表达式
    Java笔记8-抽象接口
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3260277.html
Copyright © 2011-2022 走看看