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(推理)

题目链接: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的主要内容,如果未能解决你的问题,请参考以下文章

Uva1330 / poj1964 City Game

City Game(动态规划)

hdu 1505 City Game

hdu1505City Game(动态规划)

uva 1561 - Cycle Game(推理)

UVA - 10891 Game of Sum