UVA1330 City Game
Posted towboa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA1330 City Game相关的知识,希望对你有一定的参考价值。
利用网格图上空白的方格上建一个矩形的建筑。问地区中建筑物的最大面积
递推(dp)
#include <iostream> #include <cstring> #include <sstream> using namespace std; const int N=1e3+2; char a[N][N]; int n,m,up[N][N],L[N][N],R[N][N]; void solve() int i,j; cin>>n>>m; memset(up,0,sizeof up); memset(L,0,sizeof L); memset(R,0,sizeof R); for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>a[i][j]; if(a[i][j]==\'F\') L[i][j]=j ; R[i][j]=j; up[i][j]=1; for(i=1;i<=n;i++) for(j=2;j<=m;j++) if(a[i][j]==\'F\'&&a[i][j-1]==\'F\') L[i][j] =L[i][j-1]; for(j=m-1;j>0;j--) if(a[i][j]==\'F\'&&a[i][j+1]==\'F\') R[i][j] =R[i][j+1]; for(i=2;i<=n;i++) for(j=1;j<=m;j++) if(a[i][j]==\'F\'&&a[i-1][j]==\'F\') up[i][j]=up[i-1][j]+1; L[i][j] =max(L[i][j],L[i-1][j]); R[i][j] =min(R[i][j],R[i-1][j]); int ans=0; for(i=1;i<=n;i++) for(j=1;j<=m;j++) ans=max(ans,(R[i][j]-L[i][j]+1)*up[i][j]); cout<<3*ans<<endl; signed main() int tes; cin>>tes; while(tes--) solve();
uva 1561 - Cycle Game(推理)
题目大意:给出一个环,每次从起点開始,能够选择一个权值非0的边移动,移动后减掉权值至少1点。
不能移动的为失败。
解题思路:
- 1:有0的情况,假设有方向离权值为0的边的步数为奇数,则为必胜。否则必败。
- 2:无0的情况,奇数边必胜;
- 3:有1的情况。同0的推断一样;
- 4:无1的情况,仅仅剩偶数边的情况,必败;
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 30;
int N, arr[maxn];
bool check (int k) {
int p = -1;
while (arr[++p] != k);
int q = N;
while (arr[--q] != k);
q = N - 1 - q;
return (p&1) || (q&1);
}
bool judge () {
for (int i = 0; i < N; i++) {
if (arr[i] == 0)
return check(0);
}
if (N&1)
return true;
for (int i = 0; i < N; i++) {
if (arr[i] == 1)
return check(1);
}
return false;
}
int main () {
int cas;
scanf("%d", &cas);
while (cas--) {
scanf("%d", &N);
for (int i = 0; i < N; i++)
scanf("%d", &arr[i]);
printf("%s\n", judge() ? "YES" : "NO");
}
return 0;
}
以上是关于UVA1330 City Game的主要内容,如果未能解决你的问题,请参考以下文章