正方形格通路(1)

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 4702    Accepted Submission(s): 1782

Problem Description
给你一个n*n的格子的棋盘,每一个格子里面有一个非负数。

从中取出若干个数。使得随意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻。而且取出的数的和最大。

 
Input
包含多个測试实例,每一个測试实例包含一个整数n 和n*n个非负数(n<=20)
 
Output
对于每一个測试实例。输出可能取得的最大的和
 
Sample Input
3
75 15 21
75 15 28
34 70 5
 
Sample Output
188
 

入门压缩dp,与

Poj - 3254 Corn Fields

类似。

用dp[i][j]表示前i行。第i行选第j种状态时的最优解,

首先找出全部本行不冲突的状态(即这一行中没有相邻的情况),存入state数组

计算出第i行取第j种状态时可得到的数值stn[i][j]

那么dp[i][j]=max{dp[i][j],dp[i-1][k]+stn[i][j]}
(k表示第i-1行取第k种状态

终于答案即为dp[n][j]中的最大值。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int hpn=18000;
int state[hpn],stn[25][hpn],dp[25][hpn];
//dp[i][j]:前i行,第i行选第j种状态时的最优解
int mst,map[25][25];//第i行选第j种状态时的值 inline int bet(int x,int y)
{
if(x>y) return x;
return y;
} void find_all_state(int n)
{
memset(state,0,sizeof(state));
mst=0;//最多有多少种状态
int lin=(1<<n),index=1;
for(int i=0;i<lin;++i)
{
if((i&(i<<1))==0)
{
state[index]=i;
++mst;
++index;
}
}
} int main()
{
int n;
while(cin>>n)
{
if(n==0)
{
cout<<0<<endl;
continue;
}
find_all_state(n); for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
scanf("%d",&map[i][j]);
}
} memset(stn,0,sizeof(stn));
for(int i=1;i<=n;++i)
{
for(int j=1;j<=mst;++j)
{
int b=n;
for(int t=1;t<(1<<n);t=(t<<1))
{
if((t&state[j])!=0)
{
stn[i][j]+=map[i][b];
}
--b;
}
}
}//统计第i行选第j种状态时可得到的值 memset(dp,0,sizeof(dp));
for(int i=1;i<=mst;++i)//第一行取第i种状态时
{
dp[1][i]=stn[1][i];
}
for(int i=2;i<=n;++i)//对于第i行
{
for(int j=1;j<=mst;++j)//取第j种状态
{
for(int k=1;k<=mst;++k)//第i-1行取第k种状态
{
if((state[j]&state[k])!=0) continue;
dp[i][j]=bet(dp[i][j],dp[i-1][k]+stn[i][j]);
}
}
} int ans=0;
for(int i=1;i<=mst;++i)
{
ans=bet(ans,dp[n][i]);
} cout<<ans<<endl;
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

Hdu-1565 电网接入(1) (国家压缩dp获得冠军的更多相关文章

  1. hdu 5025 Saving Tang Monk 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...

  2. HDU 3681 Prison Break(状态压缩dp + BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3681 前些天花时间看到的题目,但写出不来,弱弱的放弃了.没想到现在学弟居然写出这种代码来,大吃一惊附加 ...

  3. HDU 6125 Free from square 状态压缩DP + 分组背包

    Free from square Problem Description There is a set including all positive integers that are not mor ...

  4. hdu - 5045 - Contest(国家压缩dp)

    意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" ...

  5. HDU 1565 方格取数(1) 轮廓线dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) ...

  6. HDU 1074 Doing Homework【状态压缩DP】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意: 给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最 ...

  7. poj 3254 Corn Fields 国家压缩dp

    意甲冠军: 要在m行n陆行,有一些格您可以种树,别人做不到的.不相邻的树,我问了一些不同的共同拥有的法律. 分析: 从后往前种,子问题向父问题扩展,当种到某一格时仅仅有他和他后面的n-1个格子的情况对 ...

  8. HDU 1074 Doing Homework (状态压缩DP)

    Doing Homework Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  9. HDU 1565 方格取数(1) ——插头DP

    [题目分析] 其实直接状压就可以了. 但是有点闲,又写了一个可读性极差,智商低下,很(gou)好(pi)的代码 [代码] #include <cstdio> #include <cs ...

随机推荐

  1. discuz清空session,导致session保存机制失败,session无法更新与解决

    <?php function userErrorHandler() { $e = func_get_args(); echo '<pre style="color:red;&qu ...

  2. 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符

    一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1; int  &b=a;// b是a的别名,因此a和b是同一个单元 注 ...

  3. 事件总线帧---Otto

    我们如果这样一种业务场景.如今在做一款及时聊天应用,我们在聊天页面进行收发信息.同一时候也要实时更新前一页面的聊天记录,这时我们该怎样去实现?说说我曾经的实现策略.我使用的是广播接收器BroadCas ...

  4. poj 1094

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 26911   Accepted: 92 ...

  5. C++不支持Unicode,即使utf8

    今天,字符串unicode我们已经不需要常理的理由,但是,一些有编程语言的悠久历史.这仍然是一个头疼. 尽管第三方库支持的假设,C++事实上没有真正有效地支持unicode.即使utf8.(注意:本文 ...

  6. SVN最有效的方法打基线

    笔者:张克强    在微博上:张克强-敏捷307 2014/7/6 方法一来自于我的一条微博: 组织级scm建一个名为controlled的文件夹,当项目某文档通过评审后,组织级scm从项目文件夹下找 ...

  7. Android font-awesome 4.2 icons png(包含holo-light和holo-dark)

    项目地址: https://github.com/bitjjj/android-font-awesome-4.2-icon-pngs

  8. CentOS Kernel Source Install

    http://linuxmoz.com/centos-kernel-source-install/

  9. Linux下搭建tomcat集群全记录(转)

    本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...

  10. Urban Dictionary: psd

    Urban Dictionary: psd psd Share on twitter Share on facebook Share on more 3 up, 1 down It means Poo ...