【NOI集训】【XJ】状压dp
2015-07-05 21:12
295 查看
首先贪心得不会有多于1种不选满(除了强制选的),再dp一下即可。
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <string> #define Rep(i, x, y) for (int i = x; i <= y; i ++) #define RepE(i, x) for (int i = pos[x]; i; i = g[i].nex) #define Dwn(i, x, y) for (int i = x; i >= y; i --) using namespace std; typedef long long LL; const int N = 100005, M = N * 2, K = 103, D = 70; struct arr { int p[K]; } a[M]; int n, m, d, n0, ans, s, f[M][D], h[M][D], p, r[10]; bool cmp(arr x, arr y) { return x.p[d] > y.p[d]; } int main() { //freopen("1.in", "r", stdin); //freopen("1.out", "w", stdout); scanf ("%d%d%d%d", &m, &n, &d, &s), n0 = n; Rep(i, 1, m) { Rep(j, 1, d) scanf ("%d", &a[i].p[j]); } sort(a+1, a+m+1, cmp); Rep(i, 1, s) scanf ("%d", &r[i]); Rep(i, 1, s) { Rep(j, i+1, s) if (r[i] == r[j]) { Rep(k, i, s-1) r[k] = r[k+1]; s --; i --; break ; } } Rep(i, 1, s) n0 -= r[i]; if (n0 % d) r[++ s] = n0 % d; n0 /= d; p = (1 << s) - 1; memset(f, 63, sizeof(f)); memset(h, 0, sizeof(h)); f[0][0] = 0; Rep(j, 1, m) { Rep(k, 0, p) { Rep(x, 1, s) { if (!(k & (1 << x-1))) { f[j][k + (1 << x-1)] = min(f[j][k + (1 << x-1)], f[j-1][k] - a[j].p[r[x]] + a[j].p[d]); } } f[j][k] = min(f[j][k], f[j-1][k]); } } Dwn(j, m, 1) { Rep(k, 0, p) { Rep(x, 1, s) if (!(k & (1 << x-1))) { h[j][k + (1 << x-1)] = max(h[j][k + (1 << x-1)], h[j+1][k] + a[j].p[ r[x] ]); } h[j][k] = max(h[j][k], h[j+1][k]); } } Rep(i, n0, n0+s) { int ret = -(1 << 30); Rep(k, 0, p) { int t = 0; Rep(x, 0, s-1) if (k & (1 << x)) t ++; if (t == i - n0) ret = max(ret, h[i+1][p-k] - f[i][k]); } Rep(j, n0 + 1, i) ret += a[j].p[d]; ans = max(ans, ret); } Rep(i, 1, n0) ans += a[i].p[d]; printf("%d\n", ans); return 0; }
相关文章推荐
- 队列基本操作(链式结构)
- android.app.actionbar源码
- 匿名函数和闭包--【JavaScript】
- leetcode:Contains Duplicate和Contains Duplicate II
- Ruby on Rails Tutorial 第二章 之 用户资源&MVC&REST
- 【CF】135 Div2 Choosing Capital for Treeland
- WindowDecorActionBar源码
- 关于C++的子类指针指向父类
- 获取整数二进制1的个数
- 关于预编译头以及StdAfx.cpp的解惑
- 位运算的巧妙使用
- [安卓]新闻客户端(三) 主页面之slidingMenu & fragment(1)
- ROS学习手记 - 3 理解ROS中的基本概念_ROS_Nodes
- man/info
- 大话数据结构之四(串)
- php性能分析工具xhprof的安装使用
- Activity源码
- DOS命令基本运用
- GooUploader 控件实现上传文件
- 常见的面向对象设计原则