zoukankan      html  css  js  c++  java
  • [USACO Section 5.3]量取牛奶 Milk Measuring (动态规划,背包$dp$)

    题目链接


    Solution

    完全背包 (dp) , 同时再加一个数组 (v[i][j]) 记录当总和为(j) 时第 (i) 种物品是否被选.
    为保证从小到大和字典序,先将瓶子按大小排序.
    然后按部就班转移,要注意讨论字典序问题.转移看代码.

    Code

    #include<bits/stdc++.h>
    #define N 3002
    #define ll long long
    using namespace std;
    struct sj{ll w,r;}a[N];
    ll f[N][N],n,ans;
    
    bool cmp(sj s,sj j){return s.r>j.r;}
    
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
            scanf("%lld%lld",&a[i].w,&a[i].r);
        sort(a+1,a+n+1,cmp);
        f[0][0]=0;
        for(int i=1;i<=n;i++)
        for(int j=1;j<=i;j++)
            f[i][j]=max(f[i-1][j],f[i-1][j-1]+a[i].w-a[i].r*(j-1));
        for(int i=1;i<=n;i++)
        ans=max(ans,f[n][i]);
        cout<<ans<<endl;
    }
    
  • 相关阅读:
    17-DBSCAN密度聚类
    16-K-means聚类
    15-TF-IDF
    14-支持向量机SVM
    13-感知机原理概述
    12-随机森林
    11-集成学习原理概述
    10-决策树
    9-朴素贝叶斯
    栈和队列(python)
  • 原文地址:https://www.cnblogs.com/Kv-Stalin/p/9720863.html
Copyright © 2011-2022 走看看