输出 :2
这道题是道水题,当时卡学长了好长时间 所以写个题解发一下。
首先仔细看题 每次可更改左上角的矩阵中的数字,然后就可以简单的水过了,考虑一下搜索,爆搜嗯只有20分(还不是数据太水!加一个小贪心吧,左下角如果有1的话肯定会更改前面更改过得值,所以这时可以直接从右下角开始搜索可以直接找到最优解。
#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<iomanip> #include<ctime> #include<queue> #include<map> #include<vector> #include<stack> #include<algorithm> using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } const int maxn=100; int n,ans=100;//不易太大或太小毕竟是搜索 char a[maxn][maxn]; int b[maxn][maxn]; int check() { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(b[i][j]==1)return 0; } } return 1; } void alter(int x,int y)//vt 改变 更改 修改 { for(int i=1;i<=x;i++) for(int j=1;j<=y;j++) b[i][j]^=1; return; } void restore(int x,int y)//restore vt 恢复 使复原 { for(int i=1;i<=x;i++) for(int j=1;j<=y;j++) b[i][j]^=1; return; } void dfs(int num) { if(num>=ans)return; if(check()==1)if(ans>num){ans=num;return;} for(int i=n;i>=1;i--) { for(int j=n;j>=1;j--) { if(b[i][j]==1) { alter(i,j); dfs(num+1); } } } return; } int main() { //freopen("1.in","r",stdin); n=read(); for(int i=1;i<=n;i++)scanf("%s",a[i]+1); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) b[i][j]=a[i][j]-48; dfs(0); printf("%d ",ans);//根本不可能有不能复原的情况 return 0; }
心情不好的时候总会刷几道水题,慢慢往上爬,可是真心难受,坚持不下去了,那不还得坚持,改变那些人的看法!
这道题是一道对于栈的理解应用十分简单,5~10min就可以码完,高兴收工,栈:先进后出。还有一些技巧什么的,但细节不多.
#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<iomanip> #include<ctime> #include<queue> #include<map> #include<vector> #include<stack> #include<algorithm> using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int n; char a[500];//输入 char b[500],t=0,flag=0;//记录符号 int q[500],h=0;//记录数字 map<string,char>c;//add,min,max转换成字符 string s="";//记录字符串 int main() { freopen("1.in","r",stdin); n=read();c["add"]='+'; c["min"]='<';c["max"]='>'; while(n--) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(q,0,sizeof(q)); t=0,h=0; scanf("%s",a+1); int len=strlen(a+1); for(int i=1;i<=len;i++) { if(a[i]=='a'||a[i]=='d'||a[i]=='m'||a[i]=='i'||a[i]=='n'||a[i]=='a'||a[i]=='x') { s+=a[i]; } else { int u=0; if(s!="") { b[++t]=c[s]; s=""; } if(a[i]>='0'&&a[i]<='9') { u=u*10+(a[i]-48); while(a[i+1]>='0'&&a[i+1]<='9') { ++i; u=u*10+(a[i]-48); } q[++h]=u; } if(a[i]==')') { int x=q[h];--h; int y=q[h];--h; if(b[t]=='>')q[++h]=max(x,y); if(b[t]=='<')q[++h]=min(x,y); if(b[t]=='+')q[++h]=x+y; t--; } } } printf("%d ",q[h]); } return 0; }
有时候多希望一个人能多陪陪我,(╯﹏╰)。