LA 5842 Equipment (状态压缩+dp)
2013-02-22 23:17
246 查看
ACM-ICPC Live Archive
根据题意,因为最多只有五种属性,所以可以通过其中几种属性是否确定了来进行DP。
有这个想法是因为整体的最大值是由某个物品的其中某些属性来确定的,dp的时候可以独立的求出那些确定了的属性的值,通过不断更新,最后找到整体的最大值。
复杂度是O(k*3^k*n),当k大于5的时候,跟等于5的时候是一样的,所以k=min(k, 5)。
代码如下:
View Code
——written by Lyon
根据题意,因为最多只有五种属性,所以可以通过其中几种属性是否确定了来进行DP。
有这个想法是因为整体的最大值是由某个物品的其中某些属性来确定的,dp的时候可以独立的求出那些确定了的属性的值,通过不断更新,最后找到整体的最大值。
复杂度是O(k*3^k*n),当k大于5的时候,跟等于5的时候是一样的,所以k=min(k, 5)。
代码如下:
View Code
#define REP(i, n) for (int i = 0; i < (n); i++) #define REP_1(i, n) for (int i = 1; i <= (n); i++) int dp [M], rec[LEN][N - 1]; int work(int n, int m) { m = min(m, 5); REP_1(i, m) { REP(j, M) { for (int t = j; t; t = (t - 1) & j) { int op = j - t; REP(k, n) { int sum = 0; REP(p, 5) { if (t & (1 << p)) sum += rec[k][p]; } dp[i][j] = max(dp[i][j], dp[i - 1][op] + sum); } } } } return dp[m][M - 1]; } int main() { int n, m, T; scanf("%d", &T); while (T-- && ~scanf("%d%d", &n, &m)) { _clr(rec); _clr(dp); REP(i, n) REP(j, 5) scanf("%d", &rec[i][j]); printf("%d\n", work(n, m)); } return 0; }
——written by Lyon
相关文章推荐
- LA 4794 状态压缩dp
- LA - 4794 - Sharing Chocolate(状态压缩dp)
- hdu 1074 Doing Homework 状态压缩DP
- HDOJ 2167 Pebbles (状态压缩dp)
- HDU 1074 (DP + 状态压缩)
- You Win! 状态压缩dp
- codevs2596售货员难题——状态压缩dp
- hdu2852(ac自动机,状态压缩dp)
- [BZOJ 1087][SCOI 2005] 互不侵犯King 状态压缩DP
- Mondriaan's Dream(POJ 2411状态压缩dp)
- SGU 132 一道很恶心的状态压缩dp
- poj 1185 状态压缩dp(炮兵阵地)
- HDU 4856 (状态压缩DP+TSP)
- hdu4758 hdu2825 hdu4057 AC自动机与状态压缩dp的结合
- HDU 5045 Contest (状态压缩dp)
- HDU 4433 类似于状态压缩的DP
- BZOJ-1879 Bill的挑战 状态压缩DP
- HDU 5067 Harry And Dig Machine 状态压缩 DP
- hdu 4539 郑厂长系列故事——排兵布阵(状态压缩DP)
- poj 2288 Islands and Bridges解题报告-状态压缩dp