【bzoj2241】 SDOI2011打地鼠 暴力+剪枝
2015-10-21 12:53
459 查看
暴力加上几个剪枝就A了,首先要倒着枚举,次数超过答案的就不判了,然后要注意总数是锤子的倍数,每次打的时候从上向下打。
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> #define maxn 110 #define inf 1000000000 using namespace std; int a[maxn][maxn],b[maxn][maxn]; int sum,n,m,ans; bool check(int x,int y) { for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) b[i][j]=a[i][j]; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { int num=b[i][j]; if (num && i+x-1<=n && j+y-1<=m) { for (int xx=i;xx<=i+x-1;xx++) for (int yy=j;yy<=j+y-1;yy++) { b[xx][yy]-=num; if (b[xx][yy]<0) return 0; } } if (b[i][j]) return 0; } return 1; } int main() { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) { scanf("%d",&a[i][j]); sum+=a[i][j]; } ans=inf; for (int i=n;i>=1;i--) for (int j=m;j>=1;j--) if (sum%(i*j)==0 && sum/(i*j)<ans && check(i,j)) ans=sum/(i*j); printf("%d\n",ans); return 0; }
相关文章推荐
- Redis 字典的实现
- 【NOIP】最长序列
- 函数式编程在Java
- LeetCode(121) Best Time to Buy and Sell Stock
- 【BZOJ1037】【ZJOI2008】生日聚会Party 递推
- 【.Net码农】WebBrowser与IE的关系,如何设置WebBrowser工作在IE9模式下?
- Python notes
- LeetCode(121) Best Time to Buy and Sell Stock
- nginx实现负责均衡和动静分离
- ORACLE LINUX 6.3 + ORACLE 11.2.0.3 RAC + VBOX安装文档
- android MotionEvent中getX()和getRawX()的区别 这个需要深入理解一下
- 最长单调递增公共子序列(路径记录+poj2127+zoj2432)Greatest Common Increasing Subsequence
- Hibernate-整体介绍
- Junit入门(java测试)
- 电话号码验证
- 我的第一个JS/CSS程序
- Python 正则表达式(分组)
- Base64编码
- React Native ——入门环境搭配以及简单实例
- IOS - 自定义cell