Codeforces 1176F


题目

题意:T组物品,按顺序选一个一个选,物品首先要满足组间的相对顺序,每个物品有价值和体积,每组选择的体积不能超过3,组内的选择物品的顺序可以调整,在总的物品的顺序中,如果某一个物品它的编号是10的倍数,则这个物品的价值会翻倍。求最大价值。

做法:首先背包求出每一组,取j个物品构成体积k的最大价值,以及取j个物品构成体积k的且有一个价值翻倍的最大价值。在dp求 f[i][z] 表示前i组取了的总物品数 mod 10 是 z 的最大价值,转移时,分跨过0,和不跨过0两种讨论即可。。。做法比较容易想到。。。然而dp边界卡死了。。。写起来各种问题。。。水平低啊。。。记一下这个题。以后注意了。。

#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for(int i=(a);i<=(b);++i)
#define per(i,a,b) for(int i=(a);i>=(b);--i)
#define pb push_back
#define Pii pair<int,int>typedef long double db;
typedef long long ll;template<class T> inline void ckmx(T &a, T b) { if(b > a) a = b; }const int N = 200010;
const int Mod = 998244353;int n, a[N];
ll b[N];
ll A[N][4][4]; // A[i][j][k] 第 i 组选 j 个物品构成体积 k 的最大价值
ll g[N][4][4][2]; // g[i][j][k][0/1] 前 i 个物品, 选 j 个物品,构成体积 k,是否有一个物品价值翻倍的最大价值
ll MX[N][4][4]; // MX[i][j][k] 第 i 组选 j 个物品构成体积 k 且有一个元素价值翻倍的最大价值
ll f[N][10]; //f[i][z] 前 i 组一共用X个物品, z = X%10int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);ll ans = 0;int T; cin >> T;rep(ti, 1, T) {cin >> n;rep(i,1,n) cin >> a[i] >> b[i];auto cal = [&](ll A[4][4]) {rep(i,0,3)rep(j,0,3) A[i][j] = -1;A[0][0] = 0;rep(i,1,n) per(j,3,1) per(k,3,a[i]) if(A[j-1][k-a[i]] != -1) {ckmx(A[j][k], A[j-1][k-a[i]] + b[i]);}};cal(A[ti]);auto cal2 = [&](ll A[4][4]) {rep(i,0,3)rep(j,0,3) A[i][j] = -1;rep(i,0,n) rep(j,0,3) rep(k,0,3) g[i][j][k][0] = g[i][j][k][1] = -1;g[0][0][0][1] = 0;g[0][0][0][0] = 0;rep(i,1,n) {rep(j,0,3) rep(k,0,3) {g[i][j][k][0] = g[i-1][j][k][0];g[i][j][k][1] = g[i-1][j][k][1];if( j>=1 && k >= a[i] ) {if(g[i-1][j-1][k-a[i]][0] != -1) ckmx(g[i][j][k][0], g[i-1][j-1][k-a[i]][0] + b[i]);if(g[i-1][j-1][k-a[i]][1] != -1) ckmx(g[i][j][k][1], g[i-1][j-1][k-a[i]][1] + b[i]);if(g[i-1][j-1][k-a[i]][0] != -1) ckmx(g[i][j][k][1], g[i-1][j-1][k-a[i]][0] + b[i] + b[i]);}}}rep(i,0,3)rep(j,0,3) A[i][j] = g[n][i][j][1];};cal2(MX[ti]);}function<int(int,int)> thz = [&](int st,int ed) -> int {int f = 0;rep(i,1,10) {if((st+i)%10 == 0) f = 1;if((st+i)%10 == ed) {if(f) return 1;}}return 0;};rep(i,0,n)rep(j,0,9) f[i][j] = -1;f[0][0] = 0;rep(i,1,T) rep(z,0,9) {f[i][z] = f[i-1][z];rep(j,1,3)rep(k,1,3) {if(f[i-1][(z-j+10)%10] == -1) continue;if(A[i][j][k] != -1 && !thz((z-j+10)%10,z)) ckmx(f[i][z], f[i-1][(z-j+10)%10] + A[i][j][k]);else if(MX[i][j][k] != -1 && thz((z-j+10)%10,z)) ckmx(f[i][z], f[i-1][(z-j+10)%10] + MX[i][j][k]);}ans = max(ans, f[i][z]);}cout << ans << endl;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/11008997.html

Codeforces 1176F相关推荐

  1. CodeForces 375D Tree and Queries

    传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...

  2. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  3. 【codeforces 812C】Sagheer and Nubian Market

    [题目链接]:http://codeforces.com/contest/812/problem/C [题意] 给你n个物品; 你可以选购k个物品;则 每个物品有一个基础价值; 然后还有一个附加价值; ...

  4. CodeForces 获得数据

    针对程序的输出可以看见 CodeForces :当输入.输出超过一定字符,会隐藏内容 所以:分若干个程序进行输入数据的获取 1. 1 for (i=1;i<=q;i++) 2 { 3 scanf ...

  5. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...

    题目链接:http://www.codeforces.com/problemset/problem/281/A 题意:将一个英文字母的首字母变成大写,然后输出. C++代码: #include < ...

  6. CodeForces 595A

    题目链接: http://codeforces.com/problemset/problem/595/A 题意: 一栋楼,有n层,每层有m户,每户有2个窗户,问这栋楼还有多少户没有睡觉(只要一个窗户灯 ...

  7. codeforces A. Jeff and Digits 解题报告

    题目链接:http://codeforces.com/problemset/problem/352/A 题目意思:给定一个只有0或5组成的序列,你要重新编排这个序列(当然你可以不取尽这些数字),使得这 ...

  8. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  9. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

最新文章

  1. MXNet学习:试用卷积-训练CIFAR-10数据集
  2. 高大上的Android沉浸式状态栏?
  3. Tungsten Fabric SDN — 报文转发流程
  4. Java的知识点6—— 强制类型转换、基本类型转化时常见错误和问题、 简单的键盘输入和输出
  5. 自己建服务器 语音盒子_自建sip语音服务器
  6. Android之React Native 中组件的生命周期
  7. 《Java编码指南:编写安全可靠程序的75条建议》—— 指南19:对细粒度的安全定义自定义安全权限...
  8. 基于java的打砖块游戏_cocos creator 制作的打砖块游戏
  9. 问题集录--新手入门深度学习,选择TensorFlow 好吗?
  10. 算法设计与分析——排序算法:十大排序算法总结
  11. (转帖出自ESRI BBS)有关于GIS思想
  12. CentOS 7安装MinDoc文档系统
  13. 8188eu usbwifi模块的ap模式,rtl8188_hostapd
  14. 为什么10M、20M的宽带只有大约1、2M的下载速度——网速KB/s与Kbps(Kb/s)的区别
  15. 一个大神的工程(复旦 季同学)16bit RISC cpu
  16. [CF855G]Harry Vs Voldemort
  17. HBuilderX发布小程序打不开微信小程序开发工具
  18. 送您一份《学编程笔记本电脑选购指南》,建议收藏!
  19. python 角度判断_python的turtle也能仿抖音网红文字时钟的代码及分析
  20. 我想给我的手机下载和弦铃声,哪里可以下?

热门文章

  1. expsky.php,Typecho漏洞利用工具首发,半分钟完成渗透
  2. 机器学习案例——生态系统蒸散速率预测
  3. [SpringBoot2]@MatrixVariableUrlPathHelper
  4. 洛谷 P1294 高手去散步-邻接矩阵+dfs-求无向图的一条最长路径
  5. 2019年第十届蓝桥杯国赛B组试题D-求值-枚举
  6. 简单排序算法(Java实现)
  7. P3768 简单的数学题(杜教筛)
  8. P2605 [ZJOI2010]基站选址
  9. LCS(2021牛客多校4)
  10. CF 1529B. Sifid and Strange Subsequences