zoukankan      html  css  js  c++  java
  • dp 二维乃至多维背包

    洛谷P1855 榨取kkksc03

    分析:套路是很明显的01背包,但是这时受约束的变量有两个了,这种情况下就该用多维背包了

    分析方法一样的,用dp[i][j][k]表示从前i个愿望中挑选总时间和总金钱不超过j,k时的最大愿望数。

    则状态转移方程应该为:dp[i][j][k]=max(dp[i-1][j][k],dp[i-1][j-tme[i]][k-mny[i]]+1).

    因为多维数组,虽然这题数据量小,但是能用滚动数组就尽量用吧。

    上代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const double pi=acos(-1);
     5 int tme[110],mny[110];
     6 int dp[250][250];
     7 int main(){
     8     int n,m,t;scanf("%d%d%d",&n,&m,&t);
     9     for(int i=0;i<n;i++)scanf("%d%d",&tme[i],&mny[i]);
    10     for(int i=0;i<n;i++){
    11         for(int j=t;j>=tme[i];j--){
    12             for(int k=m;k>=mny[i];k--){
    13                 dp[j][k]=max(dp[j][k],dp[j-tme[i]][k-mny[i]]+1);
    14             }
    15         }
    16     }
    17     cout<<dp[t][m]<<endl;
    18     return 0;
    19 }
  • 相关阅读:
    HashMap和Hashtable的区别
    装箱以及拆箱
    泛型
    LinkedList和ArrayList异同
    ArrayList的输出方式以及ArrayList的因子增长数
    limit的优化
    mysql五大数据引擎的分别
    ios
    css3(1)
    php
  • 原文地址:https://www.cnblogs.com/qingjiuling/p/10142802.html
Copyright © 2011-2022 走看看