CF1633D Make Them Equal(bfs + 01背包)
Make Them Equal
题解:
首先得到 d[i]d[i]d[i],意思为从 111 到 iii 所需要花费的最小的步骤,这个可以使用 bfsbfsbfs 的思想来解决,或者直接两重循环结束。
其次就是解决一个 010101 背包问题,但是由于体积过大会爆?仔细分析,可以打出如上最大的 ddd 才发现只有 121212,那么体积其实是 min(12∗n,k)min(12 * n, k)min(12∗n,k),如此问题得到解决
要点:
- 如何在时限内得到 ddd 值,是单独去求值,还是怎么做
- 是否真的不能使用 010101 背包,考虑体积是否真的这么大
code:
#include <bits/stdc++.h>
using namespace std;
#define db double
#define ll long long
#define pii pair<int,int>
#define mm(a,b) memset(a,b,sizeof(a))
#define rush() int T; cin >> T; while (T--)
#define ACCELERATE (ios::sync_with_stdio(false),cin.tie(0))
const int N = 1e3 + 5;
const int M = (N << 2);
const int P = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
int n, k, d[N], b[N], c[N];
void bfs()
{for (int i = 2; i < N; i++) d[i] = P;for (int i = 1; i < N; i++) {for (int j = 1; j <= i; j++) {int k = i + i / j;if (k < N) d[k] = min(d[k], d[i] + 1);}}
}
int main()
{ACCELERATE;bfs();int mx = 0;rush() {cin >> n >> k;for (int i = 1; i <= n; i++) cin >> b[i];for (int i = 1; i <= n; i++) cin >> c[i];k = min(k, 12 * n);vector<int> dp(k + 1, 0);for (int i = 1; i <= n; i++) {for (int j = k; j >= d[b[i]]; j--) dp[j] = max(dp[j], dp[j - d[b[i]]] + c[i]);}cout << dp[k] << endl;}return 0;
}
CF1633D Make Them Equal(bfs + 01背包)相关推荐
- 杭电1171(01背包求解)
题目: Problem Description Nowadays, we all know that Computer College is the biggest department in HDU ...
- 【ZOJ - 3703】Happy Programming Contest(带优先级的01背包,贪心背包)
题干: In Zhejiang University Programming Contest, a team is called "couple team" if it consi ...
- 【 FZU - 2214 】Knapsack problem(逆向0-1背包)
题干: Given a set of n items, each with a weight w[i] and a value v[i], determine a way to choose the ...
- 【Codeforces 741 B. Arpa's weak amphitheater and Mehrdad's 】+ 并查集 + 01背包
B. Arpa's weak amphitheater and Mehrdad's valuable Hoses time limit per test 1 second memory limit p ...
- hdu 2955 01背包
http://acm.hdu.edu.cn/showproblem.php?pid=2955 如果认为:1-P是背包的容量,n是物品的个数,sum是所有物品的总价值,条件就是装入背包的物品的体积和不能 ...
- 计蒜客 7.22 K. Mario Kart(01背包+最短路)
题意:在一个一维的坐标轴上,给定n个点的位置,还给定m种硬币,每个硬币都有一个C和V,C代表这种硬币的花费,V代表这种硬币可以传送的距离.题目还给定一个L,如果两个点之间的最小花费超过L那么两个点之间 ...
- Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses —— DP(01背包)
题目链接:http://codeforces.com/contest/742/problem/D D. Arpa's weak amphitheater and Mehrdad's valuable ...
- 01背包输出路径、完全背包、多重背包
背包问题 一.01 Knapsack(输出路径- >选的物品) 二.完全背包 1.三重循环,极可能TLE,滚动数组优化后j逆向枚举 2.二重,优化消去变量k(没有特别厘清,但可以直接从完全背包角 ...
- 算法模板:动态规划之01背包【沈七】
算法模板:动态规划之01背包 前言 动态规划 01背包 二维背包 一维优化 经典习题 小A点菜 5 倍经验日 买干草 完结散花 参考文献 前言 唤我沈七就好啦. 动态规划 核心作用:优化 当数据范围& ...
- 浅说——九讲背包之01背包
所谓九讲,也就是: 0/1背包 0/1背包降维 完全背包 多重背包(二进制优化) 混合背包 二维费用背包 分组背包 有依赖的背包 背包的方案总数\背包的具体方案路径 0/1背包: [问题描述](经典) ...
最新文章
- linux里引号注意点
- React的生命周期
- android 外部存储列表,如何获取Android设备的已安装外部存储列表
- Nginx详解一(理论)
- [bzoj3531][Sdoi2014]旅行
- SecureCRT zmodem
- 一次对天翼安全网关的渗透
- Android Adb 连接海马玩模拟器
- Express框架、Webstorm中创建Express项目
- 水质环境监测系统解决方案
- ACM第四站————最小生成树(普里姆算法)
- html文本框的文字间距,word文本框中2行文字的间距为什么那么大
- 好玩游戏不上学去学计算机,如果你这样学习,不如去玩游戏!
- 信号与系统 傅里叶变换 拉普拉斯变换 z变换所有公式和性质 三个变换的联系 整理
- excel怎么按颜色统计单元格个数
- C语言每日一练(5月2号)——水仙花数
- 分部积分法解决二重积分问题
- FutureTask
- pandas的apply方法基础使用
- mysql导入excel表异常_mysql导入excel表格数据时出错的解决