首页 > 其他分享 >CodeStar第八周周赛普及进阶组

CodeStar第八周周赛普及进阶组

时间:2022-11-28 22:35:11浏览次数:66  
标签:CodeStar 进阶 周周赛 rep t2 t1 int 不取 dp

T1:垃圾游戏3

本题难度中等,一道稍有变化的01背包题。一般的01背包是考虑每个物品取和不取,本题是考虑每个物品带走(相当于取)还是分解(相当于不取),如果分解,也会贡献相应价值

dp[i][j] 表示前 \(i\) 个物品中选总重量不超过 \(j\) 的物品能得到的最大金币
转移:

  1. 分解:\(dp[i-1][j] + c_i\)
  2. 装走:\(dp[i-1][j-w_i] + v_i\)

\(dp[i][j]\) 是两者最大值

最终的答案是 \(dp[n][m]\)

代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 1; i <= (n); ++i)

using namespace std;

int dp[1005][10005];

inline void chmax(int& x, int y) { if (x < y) x = y; }

int main() {
    int n, m;
    cin >> n >> m;
    
    rep(i, n) {
        int w, v, c;
        cin >> w >> v >> c;
        for (int j = 0; j <= m; ++j) {
            int now = 0;
            chmax(now, dp[i-1][j]+c);
            if (j >= w) chmax(now, dp[i-1][j-w]+v);
            dp[i][j] = now;
        }
    }
    
    cout << dp[n][m] << '\n';
    
    return 0;
}

T2:飞盘队2

本题难度较大,一道计算方案数的01背包问题。如果以总能力值作为背包大小,只能得到 \(60\) 分。需要以能力值除以 \(F\) 余数作为 \(dp\) 数组的第二维,并且建两个数组分别记最大总能力值和达成最大能力的方案数,仔细讨论状态转移,才能得到满分。

做法1:

dp[i][j] 表示从前 \(i\) 头牛中取总和为 \(j\) 的方案数
转移:

不取:dp[i][j] = dp[i-1][j]
取:dp[i][j] += dp[i-1][j-Ri] (j >= Ri)

初值:\(dp[0][0] = 1\),其他 \(dp=0\)

答案:找到使得 \(dp[i][j] > 0\) 且 \(j\) 是 \(F\) 的倍数的最大的 \(j\),答案是 \(j\) 和 \(dp[i][j]\)

但注意到 \(O(R_i)\) 为 \(1e5\), \(O(\sum R_i)\) 就是 \(2e7\) 了,而 \(O(n\sum R_i)\) 就是 \(4e9\),时间肯定要炸

做法2:

dp[i][j] 记录前 \(i\) 头牛中取若干头使总和除以 \(F\) 余 \(j\) 时能得到的最大总和

f[i][j] 记录得到最大和的方法数

初值:\(dp[0][0] = 0\), 其他 \(dp=-\infty\);\(f[0][0] = 1\),其他 \(f=0\)

转移:

不取:\(t_1 = dp[i-1][j]\)
取:\(t_2 = dp[i-1][((j-R_i)\%F + F)\% F] + R_i\)
\(dp[i][j] = \max(t_1, t_2)\)
若 \(t_1 > t_2\):\(f[i][j] = f[i-1][j]\)
若 \(t_1 < t_2\):\(f[i][j] = f[i-1][((j-R_i)\%F + F)\% F]\)
若 \(t_1 = t_2\):\(f[i][j] = f[i-1][j] + f[i-1][((j-R_i)\%F + F)\% F]\)

答案:\(dp[n][0]\) 和 \(f[n][0]\)

代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 1; i <= (n); ++i)

using namespace std;
using ll = long long;

int a[205];
int dp[205][1005];
ll f[205][1005];

inline void chmax(int& x, int y) { if (x < y) x = y; }

int main() {
    int n, F;
    cin >> n >> F;

    memset(dp, 0xcf, sizeof dp);
    dp[0][0] = 0;
    f[0][0] = 1;
    rep(i, n) {
        int r;
        cin >> r;
        for (int j = 0; j < F; ++j) {
            int t1 = dp[i-1][j];
            int nj = ((j-r)%F+F)%F;
            int t2 = dp[i-1][nj]+r;
            dp[i][j] = max(t1, t2);
            
            if (t1 > t2) f[i][j] = f[i-1][j];
            else if (t1 < t2) f[i][j] = f[i-1][nj];
            else f[i][j] = f[i-1][j] + f[i-1][nj];
        }
    }
    
    cout << dp[n][0] << '\n' << f[n][0] << '\n';
    
    return 0;
}

标签:CodeStar,进阶,周周赛,rep,t2,t1,int,不取,dp
From: https://www.cnblogs.com/Melville/p/16933872.html

相关文章

  • 轻松掌握Docker使用-进阶操作(二)
    前言在上一节《​​轻松掌握Docker使用-基础入门(一)​​》中我们了解到:Docker是什么?Docker的镜像管理&基础命令Docker容器的基本操作这一节,我们来学习:如何定制Docker镜......
  • PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]
    PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]原项目链接:fork一下即可:https://aistudio.baidu.com/aistudio/projectdetail/5096910?contributionType=1相关项......
  • MySQL进阶实战4,MySQL索引详解,下篇
    一、索引索引是存储引擎用于快速查找记录的一种数据结构。我觉得数据库中最重要的知识点,就是索引。存储引擎以不同的方式使用B-Tree索引,性能也各有不同,各有优劣。例如MyI......
  • MySQL进阶实战6,缓存表、视图、计数器表
    一、缓存表和汇总表有时提升性能最好的方法是在同一张表中保存衍生的冗余数据,有时候还需要创建一张完全独立的汇总表或缓存表。缓存表用来存储那些获取很简单,但速度较慢的数......
  • 数据库进阶之各种关键字
    目录数据库进阶之各种关键字今日内容概要今日内容详细报错及作业讲解SQL语句查询关键字前期数据准备编写SQL语句的小技巧查询关键字之where筛选查询关键字之groupby分组查......
  • mysql 进阶篇
    Mysql体系结构分为连接层,服务层,引擎层(索引在这一层),存储层存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表而不是基于库的,所以存储引......
  • 小兔鲜儿网页案例进阶版1--实现商品放大镜效果
    前面有一章节介绍了使用html+css实现小兔鲜儿网页案例,但是这是一个纯静态网页。最近因为又补充学习了一下前端基础知识WebAPI篇,看到了老师实现的放大镜效果和固定侧边......
  • Camera应用开发进阶
    前言之前曾经发布过一篇关于安卓Camera踩坑的文章,​​《分享几个关于Camera的坑》​​后面有读者私信说到希望系统学习下安卓Camera的的应用开发,能不能针对Camera出一些列......
  • 二、Mybatis(进阶)
    一.接口代理方式实现Dao1.1代理开发方式介绍​ 采用Mybatis的代理开发方式实现DAO层的开发,这种方式是我们后面进入企业的主流。Mapper接口开发方法只需要程序员编......
  • PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]
    PGL图学习之图神经网络ERNIESage、UniMP进阶模型[系列八]原项目链接:fork一下即可:https://aistudio.baidu.com/aistudio/projectdetail/5096910?contributionType=1相关项......