Luogu3092 [USACO13NOV]没有找零No Change (状压DP)
将金币状压,然后就没多说的了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define R(a,b,c) for(register int a = (b); a <= (c); ++ a)
#define nR(a,b,c) for(register int a = (b); a >= (c); -- a)
#define Max(a,b) ((a) > (b) ? (a) : (b))
#define Min(a,b) ((a) < (b) ? (a) : (b))
#define Fill(a,b) memset(a, b, sizeof(a))
#define Abs(a) ((a) < 0 ? -(a) : (a))
#define Swap(a,b) a^=b^=a^=b
#define ll long long//#define ON_DEBUG#ifdef ON_DEBUG#define D_e_Line printf("\n\n----------\n\n")
#define D_e(x) cout << #x << " = " << x << endl
#define Pause() system("pause")
#define FileOpen() freopen("in.txt","r",stdin);#else#define D_e_Line ;
#define D_e(x) ;
#define Pause() ;
#define FileOpen() ;#endifstruct ios{template<typename ATP>ios& operator >> (ATP &x){x = 0; int f = 1; char c;for(c = getchar(); c < '0' || c > '9'; c = getchar()) if(c == '-') f = -1;while(c >= '0' && c <= '9') x = x * 10 + (c ^ '0'), c = getchar();x*= f;return *this;}
}io;
using namespace std;int a[100007], sum[100007], coin[17];
int bin[17];
int f[(1 << 16)+7];
int main(){FileOpen();int m, n;io >> m >> n;int totalMoney = 0;R(i,1,m){io >> coin[i];totalMoney += coin[i];}R(i,1,n){io >> a[i];sum[i] += sum[i - 1] + a[i];}bin[1] = 1;R(i,2,m) bin[i] = bin[i - 1] << 1;int maxx = (1 << m) - 1;R(i,0,maxx){R(j,1,m){if(i & bin[j]){int tmp = upper_bound(sum + 1, sum + n + 1, sum[f[i ^ bin[j]]] + coin[j]) - sum;f[i] = Max(f[i], tmp - 1);}}}int ans = -1;R(i,0,maxx){if(f[i] == n){int totalCost = 0;R(j,1,m){if(i & bin[j]){totalCost += coin[j];}}ans = Max(ans, totalMoney - totalCost);}}if(ans < 0)printf("-1");elseprintf("%d", ans);return 0;
}
转载于:https://www.cnblogs.com/bingoyes/p/11221632.html
Luogu3092 [USACO13NOV]没有找零No Change (状压DP)相关推荐
- 【[USACO13NOV]没有找零No Change】
其实我是点单调队列的标签进来的,之后看着题就懵逼了 于是就去题解里一翻,发现楼上楼下的题解说的都好有道理, f[j]表示一个再使用一个硬币就能到达i的某个之前状态,b[now]表示使用那个能使状态j变 ...
- [ NOIP提高组 2016]愤怒的小鸟(暴搜 + 状压DP)// [SNOI2017]一个简单的询问(莫队)
一次性写两道题 T1:一个简单的询问 题目 题解 代码实现 T2:愤怒的小鸟 题目 暴搜题解 暴搜代码实现 状压DP题解 状压DP代码实现 T1:一个简单的询问 题目 给你一个长度为 N 的序列 ai ...
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
\(POJ~1038~~*Bugs~Integrated~Inc:\) (复杂的状压DP) \(solution:\) 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前那道炮兵阵地 ...
- UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
整理的算法模板合集: ACM模板 目录 思路 UVA10296 Jogging Trails 题目翻译: 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图.问从任意一点出发,遍历所有的 ...
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...
- P2340 奶牛会展(状压dp)
P2340 奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览.由 ...
- Codeforces Gym 100676G Training Camp 状压dp
http://codeforces.com/gym/100676 题目大意是告诉你要修n门课,每门课有一个权值w[i], 在第k天修该课程讲获得k*w[i]的学习点数,给出了课程与先修课程的关系,要修 ...
- 【思维题 状压dp】APC001F - XOR Tree
可能算是道中规中矩的套路题吧-- Time limit : 2sec / Memory limit : 256MB Problem Statement You are given a tree wit ...
- BZOJ.3058.四叶草魔杖(Kruskal 状压DP)
题目链接 \(2^{16}=65536\),可以想到状压DP.但是又有\(\sum A_i\neq 0\)的问题.. 但是\(2^n\)这么小,完全可以枚举所有子集找到\(\sum A_i=0\)的, ...
最新文章
- 聊聊大麦网UWP版的首页顶部图片联动效果的实现方法
- Winform中实现跨窗体获取ZedGraph的ZedGraphControl控件对象
- k8s 安装redis-operator并以operator方式部署redis-standalone redis-cluster集群完整操作记录
- python中unique_一个神奇的Python机器学习交互应用开放框架
- 28 | 案例篇:一个SQL查询要15秒,这是怎么回事?
- 几个OpenSource的源代码管理软件
- Pytorch(6)-设置随机种子,复现模型结果
- The following SDK components were not installed: extra-google-m2repository and platform-tools
- 取消语法检测_中考取消了考纲,学生要如何得高分
- 在WinMain中嵌Console窗口
- PTA--Reversing Linked List
- php 实现二叉树的最大深度_LintCode 题解丨Apple面试题:二叉树的最大深度
- python阈值分割_Python实现otsu阈值分割算法
- 为什么手机浏览器打不开html文件,win7浏览器打不开本地html文件的原因及解决方法...
- ElasticSearch的简单了解和使用
- 【PTA】【C语言(一)】
- python下载包失败,下载python包失败
- 【续】DeepMind项目取得新进展:一种改进机器人学习系统的新思路
- 外校保研北大计算机,北大2018年本校保研率超53% 外校生多来自双一流名校
- SegeX Progress:MFC通用进度条