P1441 砝码称重(搜索+队列dp)
题目链接:传送门
题目大意:
给你n个砝码ai,从中去掉m个后求最多的砝码可表示的重量。
n≤20,m≤4,m<n,ai≤100。
思路:
用dfs搜掉m个砝码,然后用队列dp跑出答案,维护答案。
时间复杂度是O(Cnm * na)。
#include <bits/stdc++.h> using namespace std; int N, M, sum;
int a[];
bool vis[];
bool f[]; int ans; void dp()
{
queue <int> Q;
Q.push();
for (int i = ; i < N; i++) if (!vis[i]) {
int len = Q.size();
while (len--) {
int cur = Q.front(); Q.pop();
int nxt = cur + a[i];
if (!f[nxt]) {
f[nxt] = true;
Q.push(nxt);
}
Q.push(cur);
}
}
int cnt = ;
for (int i = ; i <= sum; i++) {
if (f[i]) {
cnt++;
f[i] = false;
}
}
ans = max(cnt, ans);
} void dfs(int dep, int cur)
{
if (dep == M) {
dp();
}
for (int i = cur; i < N; i++) {
if (!vis[i]) {
vis[i] = true;
sum -= a[i];
dfs(dep+, i+);
sum += a[i];
vis[i] = false;
}
}
} void init()
{
cin >> N >> M;
sum = ;
ans = ;
memset(f, false, sizeof f);
memset(vis, false, sizeof vis);
for (int i = ; i < N; i++) {
scanf("%d", a+i);
sum += a[i];
}
sort(a, a+N);
} int main()
{
init();
dfs(, );
cout << ans << endl;
return ;
}
P1441 砝码称重(搜索+队列dp)的更多相关文章
- [P1441]砝码称重 (搜索+DP)
对于我这种蒟蒻,是很不错的一题了. dfs搜索当前状态 满足时DP 比较坑的地方就是起始的地方 我一开始从1开始,搜索写的是从0开始. 后来就统一用0开始的了. #include<bits/st ...
- P1441 砝码称重 DFS回溯+DP
题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 请注意,砝码只能放在其中一边. 输入输出格式 输入格式: 输入文件weig ...
- 洛谷P1441 砝码称重(搜索,dfs+dp)
洛谷P1441 砝码称重 \(n\) 的范围为 \(n \le 20\) ,\(m\) 的范围为 \(m \le 4\) . 暴力遍历每一种砝码去除情况,共有 \(n^m\) 种情况. 对于剩余砝码求 ...
- 洛谷P1441 砝码称重(搜索,dfs+bitset优化)
洛谷P1441 砝码称重 \(n\) 的范围为 \(n \le 20\) ,\(m\) 的范围为 \(m \le 4\) . 暴力遍历每一种砝码去除情况,共有 \(n^m\) 种情况. 对于剩余砝码求 ...
- 洛谷P1441 砝码称重
P1441 砝码称重 题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 输入输出格式 输入格式: 输入文件weight.in ...
- 7行代码解决P1441砝码称重(附优化过程)
先贴上最终代码感受一下: #include <bits/stdc++.h> using namespace std; int i, N, M, wi[21], res = 0; int m ...
- 洛谷 P1441 砝码称重
题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 输入输出格式 输入格式: 输入文件weight.in的第1行为有两个整数n ...
- P1441 砝码称重
题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 输入输出格式 输入格式: 输入文件weight.in的第1行为有两个整数n ...
- [Luogu] P1441 砝码称重
题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 题目分析 因为读错题WAWA大哭. 先dfs枚举选的砝码,满足条件时进行d ...
随机推荐
- Springboot+Mybatis批量导入多条数据
在Mapper.xml最下面填写 <!-- 批量插入生成的兑换码 --> <insert id ="insertCodeBatch" parameterType= ...
- 把旧系统迁移到.Net Core 2.0 日记(3) - 详解依赖注入 (转)
关于DI 依赖注入, 转载这篇文章, 写得很好的. ----------------------------- DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关 ...
- Oracle 如何将“26-9月 -17 06.46.00.000000000 下午”字符串转换成标准日期格式
今天,在读取日期格式数据时,出现这样的格式“26-9月 -17 06.46.00.000000000 下午”,在网上找了一下, 这个也是oracle的一种日期保存格式,数据都是日期类型,只是显示的结果 ...
- 【Insert】使用java对mysql数据库进行插入操作
//插入100条数据package database; import java.sql.Connection; import java.sql.DriverManager; import java.s ...
- java输入一个字符串,输出该字符串的所有的排序
public class Sort { public static void arrangeSequence(char[] strArr,int i){ char temp; ArrayList< ...
- JavaScrip(三)JavaScrip变量高级操作(字符串,数组,日期)
一:字符串 charAt() 返回指定位置的字符 indexof() 返回指定字符串首次出现的位置 replace() 替换指定的字符 concat() 连接两个或多个字符串 substr(start ...
- box-shadow 边框阴影
box-shadow: 0 0 20px #000 inset;
- DevExpress WinForms使用教程:WinForms Sunburst控件
[DevExpress WinForms v18.2下载] DevExpress WinForms v18.2中包含了一个新的WinForms组件 - WinForms Sunburst,它旨在帮助开 ...
- nginx配置文服
修改nginx.conf 添加如下内容 autoindex on; # 显示目录 autoindex_exact_size on; # 显示文件大小 autoindex_localtime on; # ...
- poj3279(dfs+二进制枚举思路)
题意转载自https://www.cnblogs.com/blumia/p/poj3279.html 题目属性:DFS 相关题目:poj3276 题目原文:[desc]Farmer John know ...