Pebbles(hdu2167)
Pebbles
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1393 Accepted Submission(s): 797

The player distributes pebbles across the board so that:
?At most one pebble resides in any given square.
?No two pebbles are placed on adjacent squares. Two squares are considered adjacent if they are horizontal, vertical, or even diagonal neighbors. There's no board wrap, so 44 and 61 of row three aren't neighbors. Neither are 33 and 75 nor 55 and 92.
The goal is to maximize the number of points claimed by your placement of pebbles.
Write a program that reads in a sequence of boards from an input file and prints to stdout the maximum number of points attainable by an optimal pebble placement for each.
71 24 95 56 54
85 50 74 94 28
92 96 23 71 10
23 61 31 30 46
64 33 32 95 89 78 78 11 55 20 11
98 54 81 43 39 97
12 15 79 99 58 10
13 79 83 65 34 17
85 59 61 12 58 97
40 63 97 85 66 90 33 49 78 79 30 16 34 88 54 39 26
80 21 32 71 89 63 39 52 90 14 89
49 66 33 19 45 61 31 29 84 98 58
36 53 35 33 88 90 19 23 76 23 76
77 27 25 42 70 36 35 91 17 79 43
33 85 33 59 47 46 63 75 98 96 55
75 88 10 57 85 71 34 10 59 84 45
29 34 43 46 75 28 47 63 48 16 19
62 57 91 85 89 70 80 30 19 38 14
61 35 36 20 38 18 89 64 63 88 83
45 46 89 53 83 59 48 45 87 98 21 15 95 24 35 79 35 55 66 91 95 86 87
94 15 84 42 88 83 64 50 22 99 13 32
85 12 43 39 41 23 35 97 54 98 18 85
84 61 77 96 49 38 75 95 16 71 22 14
18 72 97 94 43 18 59 78 33 80 68 59
26 94 78 87 78 92 59 83 26 88 91 91
34 84 53 98 83 49 60 11 55 17 51 75
29 80 14 79 15 18 94 39 69 24 93 41
66 64 88 82 21 56 16 41 57 74 51 79
49 15 59 21 37 27 78 41 38 82 19 62
54 91 47 29 38 67 52 92 81 99 11 27
31 62 32 97 42 93 43 79 88 44 54 48
Sample Output
572
683
2096
2755
题意,放贝壳,要求四周不能有相临的贝壳,放的位置上有价值,求和理的方法中,价值最大的。
思路:状压dp,先筛选出(0,1<<15)内符合要求的状态,也就是考虑列上两个相邻的不能放的去掉,最终打表记录,可以发现符合要求的不过6000个不到。
然后dp[i][j],表示第i行第j种状态的最大价值。每一行的状态只和上一行的状态有关。转移方程dp[i][j]=max(dp[i][j],dp[i-1][x]+fu);
复杂度为n*n*b;(n为符合的状态,b为层数);
1 #include<stdio.h>
2 #include<algorithm>
3 #include<string.h>
4 #include<iostream>
5 #include<stdlib.h>
6 #include<queue>
7 #include<stack>
8 int check(int n);
9 int check2(int n,int m);
10 typedef long long ll;
11 char a[2000][2000];
12 int ma[20][20];
13 int dp[20][10000];
14 char b[2000];
15 int kp[20];
16 int mm[10000];
17 using namespace std;
18 int main(void)
19 {
20 int n,i,j,k,p,q,m;
21 int bb=0;
22 for(i=0; i<(1<<15); i++)
23 {
24 if(check(i))
25 {
26 mm[bb++]=i;
27 }
28 }
29 int kkk=0;
30
31 while(gets(b)!=NULL)
32 {
33 kkk++;
34 memset(dp,0,sizeof(dp));
35 int l=strlen(b);
36 int sum=0;
37 int ans=10;
38 int cnt=0;
39 for(i=0; i<=l; i++)
40 {
41 if(b[i]==' '||i==l)
42 {
43 kp[cnt++]=sum;
44 sum=0;
45 }
46 else
47 {
48 sum*=ans;
49 sum+=b[i]-'0';
50 }
51 }
52
53 for(i=0; i<cnt; i++)
54 {
55 ma[0][i]=kp[i];
56 }
57 sum=0;
58 for(i=1; i<cnt; i++)
59 {
60 gets(b);
61 int y=strlen(b);
62 int vk=0;
63 for(j=0; j<=y; j++)
64 {
65 if(b[j]==' '||j==y)
66 {
67 ma[i][vk++]=sum;
68 sum=0;
69 }
70 else
71 {
72 sum*=10;
73 sum+=b[j]-'0';
74 }
75 }
76
77 }
78 for(i=0; i<bb; i++)
79 {
80 if(mm[i]>(1<<cnt))
81 {
82 break;
83 }
84 }
85 int uu=i;
86 for(i=0; i<uu; i++)
87 {
88 int zz=0;
89 for(j=0; j<cnt; j++)
90 {
91 if((1<<j)&mm[i])
92 {
93 zz+=ma[0][j];
94 }
95 }
96 dp[0][i]=zz;
97 }
98 int x;
99 for(i=1; i<cnt; i++)
100 {
101 for(j=0; j<uu; j++)
102 {
103 int fu=0;
104 for(int y=0; y<cnt; y++)
105 {
106 if((1<<y)&mm[j])
107 {
108 fu+=ma[i][y];
109
110 }
111 }
112 for(x=0; x<uu; x++)
113 {
114 if(check2(mm[x],mm[j]))
115 {
116 dp[i][j]=max(dp[i][j],dp[i-1][x]+fu);
117
118 }
119 }
120
121 }
122
123 }
124 int maxx=0;
125 for(i=0; i<uu; i++)
126 {
127 maxx=max(maxx,dp[cnt-1][i]);
128 }
129 printf("%d\n",maxx);
130 if(kkk)
131 {
132 getchar();
133 }
134 }
135 return 0;
136 }
137
138 int check(int n)
139 {
140 if((n>>1)&(n))
141 {
142 return 0;
143 }
144 else
145 {
146 return 1;
147 }
148 }
149 int check2(int n,int m)
150 {
151 int ss=(n>>1);
152 int vv=n<<1;
153 if(m&ss||vv&m||n&m)
154 {
155 return 0;
156 }
157 return 1;
158 }
状压DP
Pebbles(hdu2167)的更多相关文章
- HDU2167 Pebbles(状压DP)
题目给一张n×n的格子,每个格子都有数字,要从格子中取若干个数字,八个方向相邻的数字不能一起取,问取的数字最大和是多少. 从第一行一行一行看下去,可以发现第1行取哪几列只会影响到第2行,第3行后面的一 ...
- [hdu2167]Pebbles
来自FallDream的博客,未经允许,请勿转载,谢谢. 给定一个方阵,你要取出一些数字,满足没有两个格子八联通相邻的前提下和最大,求这个和 n<=15 插头dp,保存轮廓线以及目前转移点左上方 ...
- codeforces 507B. Painting Pebbles 解题报告
题目链接:http://codeforces.com/problemset/problem/509/B 题目意思:有 n 个piles,第 i 个 piles有 ai 个pebbles,用 k 种颜色 ...
- 贪心 Codeforces Round #289 (Div. 2, ACM ICPC Rules) B. Painting Pebbles
题目传送门 /* 题意:有 n 个piles,第 i 个 piles有 ai 个pebbles,用 k 种颜色去填充所有存在的pebbles, 使得任意两个piles,用颜色c填充的pebbles数量 ...
- Pebbles
Pebbles Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Sub ...
- UVALive 7461 Separating Pebbles (计算几何)
Separating Pebbles 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/H Description http://7 ...
- B. Painting Pebbles
B. Painting Pebbles time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论
1982: [Spoj 2021]Moving Pebbles Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 130 Solved: 88[Submi ...
- cf509B Painting Pebbles
B. Painting Pebbles time limit per test 1 second memory limit per test 256 megabytes input standard ...
随机推荐
- 云原生PaaS平台通过插件整合SkyWalking,实现APM即插即用
一. 简介 SkyWalking 是一个开源可观察性平台,用于收集.分析.聚合和可视化来自服务和云原生基础设施的数据.支持分布式追踪.性能指标分析.应用和服务依赖分析等:它是一种现代 APM,专为云原 ...
- 零基础学习java------day11------常用API---Object、Scanner、String、StringBufer/StringBuilder
API概述 API(application Programming Interface, 应用程序编程接口),是一些预先定义的函数.目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力, ...
- android 跳到应用市场给软件评分
1 String packetName = this.getPackageName(); 2 Uri uri = Uri.parse("market://details?id=" ...
- linux 定时导出sql查询结果文件
如果想在服务器端生成sql查询结果的txt文件. 大体思路就是: 1.创建一个到处txt文件的sql脚本. set ARRAYSIZE 50 --从数据库往客户端一次发送记录数 set linesiz ...
- Mysql的行级锁
我们首先需要知道的一个大前提是:mysql的锁是由具体的存储引擎实现的.所以像Mysql的默认引擎MyISAM和第三方插件引擎 InnoDB的锁实现机制是有区别的. Mysql有三种级别的锁定:表级锁 ...
- 3.0 rust 项目路径
$ rustc --versionrustc 1.44.0 (49cae5576 2020-06-01) 将代码存在到不同的文件 main.rs mod aa; fn main() { println ...
- Shell脚本实现乱序排列文件内容的多种方法(洗牌问题)
洗牌问题:洗一副扑克,有什么好办法?既能洗得均匀,又能洗得快?即相对于一个文件来说怎样高效率的实现乱序排列? ChinaUnix 确实是 Shell 高手云集的地方,只要你想得到的问题,到那里基本上都 ...
- JSP 文字乱码、${}引用无效
问题: 代码:<form action="/test/requestPost.do" method="post"> <input type=& ...
- jQuery全局进行方法扩展
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>01 ...
- BigDecimal中要注意的一些事
一.关于public BigDecimal(double val) BigDecimal中三个主要的构造函数 1 public BigDecimal(double val) 将double表示形式转换 ...