程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 4791 dp預處理+二分

hdu 4791 dp預處理+二分

編輯:C++入門知識

hdu 4791 dp預處理+二分


題意: 打印東西,給出區間(張數)對應費用(到達一定張數就都按某更低的價格),m次詢問,問最優費用。給的時候按張數遞增給的。

dp出當前張數到最後的最小值。對於詢問q,然後二分處》=q的最小的一個張數的價格。min(這個價格*p,dp[這+1])即可。nlogn;後來看網上有些人用線段樹,沒必要的。

ps:開始竟然因為犯中間數據爆int的初級錯誤!,不該不該!

#include
#include
#include
#include
using namespace std;
struct node
{
   long long si;
    long long pi;
    long long pay;
};
long long dp[100005];
node v[100008];
int n,m;
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        for(int i=0;i=0;i--)
        {
           dp[i]=min(v[i].pay,dp[i+1]);
        }
        int x;
       while(m--)
       {
           scanf("%d",&x);
           int r=n,l=0,mid;
           while(l+1x)
               {
                   r=mid;
               }
               else
               {
                   l=mid;
               }
           }
          long long ans=v[l].pi*x;
           if(l+1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved