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
  • 相关阅读:
    shell 调试
    shell中的函数参数
    shell脚本执行的区别
    《C# 语言学习笔记》——C# 简介
    【SVN】SVN使用教程总结
    SVN Unable to connect to a repository at URL问题解决
    前后端分离(三)
    前后端分离(二)
    前后端分离(一)
    【git】Git的使用
  • 原文地址:https://www.cnblogs.com/For-Miku/p/12274315.html
Copyright © 2011-2022 走看看