51NOD1337 翻转游戏 【贪心】
来源:互联网 发布:120首网络音乐产品 编辑:程序博客网 时间:2024/05/18 02:40
传送门
显然当没有'?'时,模拟一遍即可当位置i是'?'时,如果后续的关卡中,位置i需要关灯,且当前关卡必须关掉一些灯,则顺手关掉开灯也同理
#include<stdio.h>#include<bits/stdc++.h>#define ll long long#define pii pair<int,int>#define pll pair<ll,ll>#define MEM(a,x) memset(a,x,sizeof(a))#define lowbit(x) ((x)&-(x))using namespace std;const int inf=1e9+7;const int N = 50+5;char str[N][N];int to[N][N];//0:必须关,1必须开,2尽量关,3尽量开int now[N];void initTo(int n,int m){ for(int i=0;i<n;++i){ for(int j=0;j<m;++j){ switch(str[i][j]){ case '-': to[i][j]=0; break; case '+': to[i][j]=1; break; case '?': to[i][j]=2; for(int k=i+1;k<n;++k){ if(str[k][j]!='?'){ to[i][j]=2+(str[k][j]=='+'); break; } } break; } } }}int slove(int n,int m){ initTo(n,m); int ans=n; MEM(now,0); for(int i=0;i<n;++i){ bool mustOpen=0; bool mustClose=0; for(int j=0;j<m;++j){ if(to[i][j]==0&&now[j]==1){ mustClose=1; } if(to[i][j]==1&&now[j]==0){ mustOpen=1; } } ans+=mustOpen+mustClose; for(int j=0;j<m;++j){ if(to[i][j]<2){ now[j]=to[i][j]; } if(mustClose&&to[i][j]==2){ now[j]=0; } if(mustOpen&&to[i][j]==3){ now[j]=1; } } } return ans;}int main(){ // freopen("/home/lu/code/r.txt","r",stdin); //freopen("/home/lu/code/w.txt","w",stdout); int T; scanf("%d",&T); while(T--){ int n,m; scanf("%d%d",&n,&m); for(int i=0;i<n;++i){ scanf("%s",str[i]); } printf("%d\n",slove(n,m)); } return 0;}
阅读全文
0 0
- 51NOD1337 翻转游戏 【贪心】
- 51nod 1337 翻转游戏
- 51nod-1337:翻转游戏
- 51nod 1337 翻转游戏
- 51Nod-1337-翻转游戏
- 矩阵翻转 贪心 水题
- Flip Game翻转游戏
- 翻转棋游戏
- 【搜索】翻转游戏
- 翻转游戏题解
- 2946 翻转游戏
- poj 3279(翻转问题贪心)
- 51nod 1390 游戏得分(贪心)
- 【搜索优化】翻转游戏 flip
- JAVA之翻转棋游戏
- 【高斯消元】 HDOJ 5257 翻转游戏
- 【Leetcode】 Flip Game 翻转游戏
- Google算法题:翻转游戏
- JSP中文乱码问题的简易解决方案
- Py3异步爬虫浅涉
- javascript数据类型
- aardio学习记录-2.使用json实现aardio与html界面的数据互动
- android 设置各种颜色 android:background="@color/white"
- 51NOD1337 翻转游戏 【贪心】
- c/c++字符串拼接追加复制,字符串和int相互转换,sscanf的转义
- 【JZOJ 5347】 遥远的金字塔
- 深入分析String
- tiny4412 设备树之SD卡驱动(三)
- 练习3
- Java常见面试(11)
- 九天学会Java,第五天,函数定义函数调用
- spark集群搭建与集群上运行wordcount程序