zoukankan      html  css  js  c++  java
  • 洛谷p1023

    #include<stdio.h>
    
    typedef struct product{
      int price;
      int sale;
    }Product;
    
    int main(void){
      int expect;
      int price, sale;
      int ogPrice, ogSale, maxPrice=0;
      Product p[10050];
      for(int i=0; i<10050; i++){
        p[i].sale = 0;
        p[i].price = 0;
      }
      scanf("%d", &expect);
      scanf("%d%d", &price, &sale);
      maxPrice = ogPrice = price;
      ogSale = sale;
      p[ogPrice].price = price;
      p[ogPrice].sale = sale;
      while(1){
        scanf("%d%d", &price, &sale);
        if(price==-1 && sale==-1)
          break;
        p[price].price = price;
        p[price].sale = sale;
        if(price > maxPrice)
          maxPrice = price;
      }
      int dec;
      Product be, af;//前驱后继
      scanf("%d", &dec);
      for(int i=ogPrice; i<10050; i++){
        if(p[i].price == 0){
          p[i].price = i;
          if(p[i].price > maxPrice)
            p[i].sale = p[i-1].sale - dec;
          else{
            for(int j=i-1; j>=ogPrice; j--){
              if(p[j].price != 0)//说明被赋过值
                be = p[j];
                break;
              }
            for(int j=i+1; j<10050; j++){
              if(p[j].price != 0){
                af = p[j];
                break;
              }
            }
            p[i].sale = be.sale+((af.sale - be.sale)/(af.price - be.price));
        }
      }
        if(p[i].sale <= 0)
          break;
      }
      int maxId = -1;
      int maxProfit = -1;
      int profit;
      int add = 0, minus = 0;
      while(maxId != expect && add < 10000){
        maxId = -1;
        maxProfit = -1;
        for(int i=ogPrice; i<10050; i++){
          if(p[i].sale <= 0)
            break;
          profit = (p[i].price-p[ogPrice].price+add)*p[i].sale;
          if(profit >= maxProfit){
            maxId = i;
            maxProfit = profit;
          }
        }
        add++;
      }
      if(maxId == expect)
        add--;
      else
        add = 100000;
    
      maxId = -1;
      maxProfit = -1;
      while(maxId != expect && minus*(-1) < 10000){
        maxId = -1;
        maxProfit = -1;
        for(int i=ogPrice; i<10050; i++){
          if(p[i].sale <= 0)
            break;
          profit = (p[i].price-p[ogPrice].price+minus)*p[i].sale;
          if(profit >= maxProfit){
            maxId = i;
            maxProfit = profit;
          }
        }
        minus--;
      }
      if(maxId == expect){
        ++minus;
      }
      else
        minus = -100000;
    
      if(add == 100000 && minus == -100000)
        printf("NO SOLUTION");
      else if(add < minus*(-1))
        printf("%d", add);
      else
        printf("%d", minus);
    
      return 0;
    }
  • 相关阅读:
    屏蔽浏览器的脚本错误提示
    服务器定时重启计划任务
    卖程序的小女孩(转)
    会话状态已创建一个会话 ID,但由于响应已被应用程序刷新而无法保存它。
    Sesion空框架跳到登陆js
    poj 1679 The Unique MST (次小生成树 模版)
    hdu 3488 Tour (km 二分图 最小权)
    sdut 2401 最大矩形面积
    poj 3422 Kaka's Matrix Travels (最大费用流(最小费用最大流)+++拆点)
    博弈论 简介
  • 原文地址:https://www.cnblogs.com/ssNiper/p/11144470.html
Copyright © 2011-2022 走看看