Hdu-1565 电网接入(1) (国家压缩dp获得冠军
正方形格通路(1)
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4702 Accepted Submission(s): 1782
从中取出若干个数。使得随意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻。而且取出的数的和最大。
3 75 15 21 75 15 28 34 70 5
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获得冠军的更多相关文章
- hdu 5025 Saving Tang Monk 状态压缩dp+广搜
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092939.html 题目链接:hdu 5025 Saving Tang Monk 状态压缩 ...
- HDU 3681 Prison Break(状态压缩dp + BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3681 前些天花时间看到的题目,但写出不来,弱弱的放弃了.没想到现在学弟居然写出这种代码来,大吃一惊附加 ...
- HDU 6125 Free from square 状态压缩DP + 分组背包
Free from square Problem Description There is a set including all positive integers that are not mor ...
- hdu - 5045 - Contest(国家压缩dp)
意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" ...
- HDU 1565 方格取数(1) 轮廓线dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1565 方格取数(1) Time Limit: 10000/5000 MS (Java/Others) ...
- HDU 1074 Doing Homework【状态压缩DP】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意: 给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最 ...
- poj 3254 Corn Fields 国家压缩dp
意甲冠军: 要在m行n陆行,有一些格您可以种树,别人做不到的.不相邻的树,我问了一些不同的共同拥有的法律. 分析: 从后往前种,子问题向父问题扩展,当种到某一格时仅仅有他和他后面的n-1个格子的情况对 ...
- HDU 1074 Doing Homework (状态压缩DP)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- HDU 1565 方格取数(1) ——插头DP
[题目分析] 其实直接状压就可以了. 但是有点闲,又写了一个可读性极差,智商低下,很(gou)好(pi)的代码 [代码] #include <cstdio> #include <cs ...
随机推荐
- POJ 3415 Max Sum of Max-K-sub-sequence (线段树+dp思想)
Max Sum of Max-K-sub-sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- Threejs 的场景查看 - 几个交互事件库助你方便查看场景
Threejs 的场景查看 - 几个交互事件库助你方便查看场景 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&q ...
- 安卓开发28:自定义View类
自定义View类 通过自定义View类,可以自定义复杂的,按照自己需求的控件. 一个简单的例子 mainActivity.java 这个里面就是最普通的代码,但是给自定义的控件加上了一个onclick ...
- 《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_2_建立开发环境
本文对应书本5.1.3的内容 书本中通过CVS下载的源码 但是笔者实践的时候发现无法下载...地址已经失效了(也许是笔者的失误输错地址所致) 可以用git下载 地址是: http://git.ecli ...
- linux下查看日志基本命令
1.cat命令: 功能:1)显示整个文件. 演示样例: $ cat fileName 2)把文件串连接后传到基本输出,如将几个文件合并为一个文件或输出到屏幕. 演示样例: $ cat file1 fi ...
- SQL SERVER中的流程控制语句
流程控制语句 是指用来控制程序运行和流程分至点额命令.一般指的是逻辑计算部分的控制. 1.Begin End语句 封装了多个T-SQL语句组合,将他们组成一个单元来处理. 一般在条件查询或者循环等控制 ...
- 在阿里云的CentOS环境中安装django
购买了一台阿里云主机.操作系统为CentOS 6.5.准备在上面跑Django做Web开发.因为CentOS自带的python版本号较低,安装Django先要安装新版本号python.还是费了点周折. ...
- Java 兑换ObjectC代码
现在非常多app发展,server我们使用Java发展,实时数据交换,与Android非常easy实现.是否xml依然是json,它可以很容易地转换成一个对象.这可以是硬IOS该程序猿.它们应根据数据 ...
- java文件创建、删除、读取、写入操作大全
一.获得控制台用户输入的信息 public String getInputMessage() throws IOException...{ System.out.println("请输入您的 ...
- 【Android UI】案例03滑动切换效果的实现(ViewPager)
本例使用ViewPager实现滑动切换的效果.本例涉及的ViewPager.为android.support.v4.view.ViewPager.所以须要在android项目中导入android-su ...