zoukankan      html  css  js  c++  java
  • CodeForces 1107F. Vasya and Endless Credits

    题目简述:给定 $n leq 500$ 个贷款方式,其中第$i$个贷款额为$a_i$元,需要$k_i$个月偿还,每月还贷$b_i$元。在每个月月初可申请其中一个贷款,而在每个月月底时需要还贷。求:(在某一时刻)可获得的最多贷款。

    观察1:获得最多贷款的时刻一定在$n$月以内。

    解1:(二分图最佳匹配,最小费用最大流)code

    观察2:倒数第$j$个月申请的第$i$个贷款,在获得最多贷款的时刻之前,需要还贷$b_imin{k_i,j-1}$元。

    设$X$部有$n$个点,记为$X_i$,表示第$i$个贷款方式;$Y$部有$n$个点,记为$Y_j$。$X_i$和$Y_j$之间的连线表示倒数第$j$个月申请第$i$个贷款。

    连边$(X_i, Y_j)$,权值为$max{a_i-b_imin{k_i,j-1},0}$。二分图最佳匹配即为答案。使用KM算法求二分图最佳匹配,时间复杂度为$O(n^3)$。

    解2:(动态规划)code1 code2

    观察3:在最优解中,第$n$个月仍未完成还贷的贷款方式的申请顺序按$b_i$递增。

    将所有贷款方式按$b_i$降序排序后,设$F[i][j]$表示前$i$个贷款方式中【有$j$种贷款方式在第$n$个月仍未完成还贷】的最优解,则

    $F[i][j] = max{ F[i-1][j]+max{a_i-b_i k_i, 0}, F[i-1][j-1]+a_i-b_i(j-1) },$

    其中$F[0][0] = 0$,$F[i][j] = -infty$ 若 $j < 0$,且$F[i][j] = 0$ 若 $j > i$。

    时间复杂度为$O(n^2)$。

  • 相关阅读:
    Lua的数学函数
    以KeyValue形式构建Lua Table
    查看占用网速的程序
    JSONObject以及json(转)
    Windows 7 下玩游戏不能全屏
    Windows 7 卸载 IE10
    win7无线网络共享
    打印后台程序服务没有启动,每次打开Powerdesigner都会要我安装打印机
    SQL 条件 判断 select case as
    MyEclipse Web项目调试
  • 原文地址:https://www.cnblogs.com/TinyWong/p/10343282.html
Copyright © 2011-2022 走看看