HDU 1565(方格取数)
来源:互联网 发布:三星4821hn网络打印 编辑:程序博客网 时间:2024/05/23 01:49
第一道状态压缩dp,比较简单,做得也比较暴力,不过还挺适合入门,。。贴个代码纪念一下
#include <cstdio>#include <vector>#include <cstring>#include <iostream>#include <algorithm>#define pub push_back#define LL __int64using namespace std;const int N = 25;const int M = 18000;int dp[N][M], g[N][N], sum[N][M];int getSum(int r, int num){ int idx = 1; int tot = 0; while(num){ if((num & 1)) tot += g[r][idx]; num >>= 1; idx++; } return tot;}int main(){ int n, i, j, k; while(~scanf("%d", &n)){ memset(dp, 0, sizeof(dp)); memset(g, 0, sizeof(g)); memset(sum, 0, sizeof(sum)); vector<int> v; for(i = 1;i <= n;i++) for(j = 1;j <= n;j++) scanf("%d", &g[i][j]); for(i = 0;i <= (1 << n) - 1;i++) if((i & (i << 1)) == 0){ for(j = 1;j <= n;j++) sum[j][v.size()] = getSum(j, i); v.pub(i); } int res = 0; for(i = 1;i <= n;i++) for(j = 0;j < v.size();j++) for(k = 0;k < v.size();k++) if((v[j] & v[k]) == 0){ dp[i][j] = max(dp[i][j], dp[i - 1][k] + sum[i][j]); res = max(res, dp[i][j]); } cout << res << endl; } return 0;}
- hdu 1565 方格取数
- HDU 1565(方格取数)
- HDU 1565 方格取数(1)
- hdu 1565 方格取数(1)
- HDU-1565-方格取数(1)
- hdu 1565 方格取数(1)
- HDU 1565 方格取数(1)
- hdu(1565)方格取数(1)
- hdu 1565 方格取数(1)
- hdu 1565 方格取数(1)
- hdu 1565 方格取数(1)
- HDU - 1565 方格取数(1) (DP)
- hdu 1565 方格取数(1)
- HDU 1565 方格取数(1)
- HDU 1565 方格取数(1)
- HDU 1565 方格取数 题解
- hdu acm 1565 方格取数(1)
- HDU 1565 方格取数(1)
- typedef和#define的用法及区别
- iOS有几种不同的键盘布局
- opencv2.4.2在VS2010下的配置
- 第五次作业
- POJ 1984 Navigation Nightmare
- HDU 1565(方格取数)
- The Clocks
- jbpm安装
- Python 代码性能优化技巧
- Jquery实战学习--必须选中条约才能继续操作
- 泛型操作范例
- 谈谈怎么实现Oracle数据库分区表
- 50个令人叹为观止的JavaScript应用站点
- linux软件安装:RPM 与YUM