1.题目大意:牛牛制作材料,50行 每行不超过50 个单词(大写,空格隔开),求不同的材料为多少?
样例:BUTTER FLOUR HONEY FLOUR EGG
输出:4
水题
代码:
/*************************************************************************
> File Name: wangyi1.cpp
> Author:chudongfang
> Mail:1149669942@qq.com
> Created Time: 2016年08月02日 星期二 19时30分54秒
************************************************************************/
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
char str[300][55];
int main(int argc,char *argv[])
{
int re = 0,i;
int count =0 ;
while(scanf("%s",str[count]) != EOF)
{
for(i=0;i<count;i++)
{
if(strcmp(str[i],str[count]) == 0)
break;
}
if(i == count ) re++;
count++;
}
printf("%d",re);
return 0;
}
2.牛牛分土地, 行割三刀,列割三刀,分为16份,牛牛只能取最小的那一份,一种分割方式,使得牛牛分得的土地最大?
样例:
4 4 (代表行数和列数)
3 3 3 2
3 2 3 3
3 3 3 2
2 3 2 3
样例输出:
2
思想,先递归确定切的6条边界,,然后计算比较,简单来说就是暴力求解。
先上代码:可能有不足和错误之处,请多多指教!
/*************************************************************************
> File Name: wangyi.cpp
> Author:chudongfang
> Mail:1149669942@qq.com
> Created Time: 2016年08月02日 星期二 19时27分27秒
************************************************************************/
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include <algorithm>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int getmin(int ordern[],int orderm[]);
int fenzhi(int ordern[5],int orderm[5],int i,int j,int x1,int x2);
int maxx=-1;
int num[80][80];
int n,m;
int main(int argc,char *argv[])
{
int ordern[5];
int orderm[5];
int i,j;
memset(num,0,sizeof(num));
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
scanf("%d",&num[i][j]);
ordern[0] = 1;
ordern[4] = n+1;
orderm[0] = 1;
orderm[4] = m+1;
fenzhi(ordern,orderm,2,2,1,1);
printf("%d",maxx);
return 0;
}
//i代表行,j代表列
int fenzhi(int ordern[5],int orderm[5],int i,int j,int x1,int x2)
{
int k,l;
if(i>n || j>m ||x1>4 || x2>4) //跳出边界
return 0 ;
if(x1 == 4 && x2 == 4)
{
int t= getmin(ordern,orderm);
if(maxx < t) //更新最大值
maxx = t;
return 0;
}
for(k=i;k<=n;k++)
{
for(l=j;l<=m;l++)
{
ordern[x1] = k;
orderm[x2] = l;
fenzhi(ordern,orderm,k+1,l+1,x1+1,x2+1);
}
}
return 0;
}
//根据边界求解。
int getmin(int ordern[],int orderm[])
{
int sum =0 ;
int min1=INF;
int i,j,k,l,x,y;
for(x=1;x<=4;x++)
{
for(y=1;y<=4;y++)
{
sum=0;
for(i=ordern[x-1];i<ordern[x];i++)
{
for(j=orderm[y-1];j<orderm[y];j++)
{
sum+=num[i][j];
}
}
if(min1 > sum && sum != 0) min1= sum;
}
}
return min1;
}