炮兵阵地 POJ
来源:互联网 发布:java传递参数基本类型 编辑:程序博客网 时间:2024/06/15 10:00
https://vjudge.net/contest/177552#problem/V
参考https://vjudge.net/solution/8102820
还是只能看别人的,
他这里预处理。。
所以存的就不是(1<<10)那么大的数了,所以可以保存上一个的状态和这一个的状态。。
自己太粗心了。。弄了挺久都没改出来。。。(以后再改吧。。)
int n,m;vector<int>state[110];int dp[110][N][N];char s[110][15];void solve(){ for(int i=1;i<=n;++i){ for(int j=0;j<state[i].size();++j){ int num=0,t=state[i][j]; while(t){ t&=t-1;num++; } if(i==1)dp[i][j][0]=num; else{ for(int last=0;last<state[i-1].size();++last){ if(!(state[i][j]&state[i-1][last])){ if(i==2)dp[i][j][last]=max(dp[i][j][last],num+dp[i-1][last][0]); else{ for(int z=0;z<state[i-2].size();++z) if(!(state[i][j]&state[i-2][z])) dp[i][j][last]=max(dp[i][j][last],dp[i-1][last][z]+num); } } } } } }}int main(){ while(~sf("%d%d",&n,&m)){ mem(dp,0); int ans=0; rep(i,1,n){ sf("%s",s[i]); } int up=(1<<m)-1; for(int i=1;i<=n;++i){ state[i].clear(); int t=0; for(int k=0;k<m;++k){ t+=(1<<k)+s[i][k]=='P'?0:1; } for(int j=0;j<=up;++j){ if(!(j&(j>>1))&&!(j&(j>>2))&&!(j&(j<<1))&&!(j&(j<<2))&&!(j&t)) state[i].push_back(j); } } solve(); for(int i=0;i<state[n].size();++i){ if(n==1)ans=max(ans,dp[1][i][0]); else for(int j=0;j<state[n-1].size();++j) ans=max(ans,dp[n][i][j]); } pf("%d\n",ans); }}
阅读全文
0 0
- poj 1185 炮兵阵地
- POJ 1185 炮兵阵地
- poj 1185炮兵阵地
- poj 1185 炮兵阵地
- poj 1185 炮兵阵地
- poj 1185 炮兵阵地
- poj 1185 炮兵阵地
- POJ-1185-炮兵阵地
- POJ 1185 炮兵阵地
- poj 1185 炮兵阵地
- POJ 1185 炮兵阵地
- poj 1185炮兵阵地
- poj 1185 炮兵阵地
- poj 1185 炮兵阵地
- POJ 1185 炮兵阵地
- POJ 1185 炮兵阵地
- poj 1185 炮兵阵地
- poj 1185 炮兵阵地
- 经典WebView加载HTML布局示例
- Android 的网络请求需要开辟子线程的原因 +程序实例
- 括号配对问题
- 王学岗ToolBar,DrawLayout+Navigation的使用(二)
- 算法训练 字符串逆序
- 炮兵阵地 POJ
- 两两交换链表中的节点
- 全栈(FullStack)工程师指南
- emWin 2天速成实例教程003_Framewin和Window窗口控件和2D绘图
- C#多线程之二:ManualResetEvent和AutoResetEvent
- linux内核中断
- 汇编中将代码,数据,栈放入相同段空间的缺点
- 线程间的通信、同步方式与进程间通信方式
- leetcode有序数组转换成BST