zoukankan      html  css  js  c++  java
  • P3983 赛斯石(赛后强化版)

    链接:Miku

    -------------

    题目描述一脸懵逼

    ------------

    这道题本质上是两个完全背包而已。首先,对于每个船,他所能装的最大货物价值是一定的,

    我们可以跑完全背包求出每艘船能装的最大价值

    -------------

    然后考虑需求,虽然说题目是把一块大石头分割成小石头,不过我们倒着想,把许多小石头拼成一个大石头不也是一样吗?并且如果石头的体积大于1,那么我们最后还是要分成小的,那么其实只有10个物品,十艘船。

    --------------

    至于船费,每艘船的价格一定,那么我们在收益里减去就行了。

    -------------

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    long long  f[11];//每艘船最大价值
    long long  dp[100001];//体积在i时的总价值
    long long  n;
    long long  a[11];//小石头单个价值
    int pr[11]={0,1,3,5,7,9,10,11,14,15,17};
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=10;++i){
            scanf("%d",&a[i]);
        }
        for(long long  i=1;i<=10;++i){
            for(long long  j=i;j<=10;++j)
                f[j]=max(f[j],f[j-i]+a[i]);
        }
        for(int i=1;i<=10;++i){
            f[i]-=pr[i];
    
        }
        for(long long  i=1;i<=10;++i){
            for(long long  j=i;j<=n;++j){
                dp[j]=max(dp[j],dp[j-i]+f[i]);
            }
        }
        cout<<dp[n];
        return 0;
    }
    Ac
  • 相关阅读:
    ubuntu下安装maven
    159.Longest Substring with At Most Two Distinct Characters
    156.Binary Tree Upside Down
    155.Min Stack
    154.Find Minimum in Rotated Sorted Array II
    153.Find Minimum in Rotated Sorted Array
    152.Maximum Product Subarray
    151.Reverse Words in a String
    150.Evaluate Reverse Polish Notation
    149.Max Points on a Line
  • 原文地址:https://www.cnblogs.com/For-Miku/p/12274315.html
Copyright © 2011-2022 走看看