写了两道题
刚开始用的之前做组合输出的方法,时间超限了,想不出怎么优化,后面看了题解,代码如下
#include <stdio.h>
#include <stdlib.h>
int n,min=2e9;
int a[11],b[11];
//搜索
void hly(int s,int x,int y)
{
//当s>n时搜索完毕
if(s>n){
//检查是否为清水
if(x==1&&y==0)
return;
//更新最小值
if(min>abs(x-y))
min=abs(x-y);
return;
}
//添加该配料
hly(1+s,x*a[s],y+b[s]);
//不添加该配料
hly(1+s,x,y);
return;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d %d",&a[i],&b[i]);
}
//搜索
hly(1,1,0);
printf("%d\n",min);
return 0;
}
固定了正方形的右下角(i,j),此时答案为Min(i,j),枚举求和。
同理,固定矩形右下角(i,j),显然此时矩形个数为i*j。
得出答案
#include <stdio.h>
#include <stdlib.h>
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
int main()
{
int n,m,i,j;
long long x=0,y=0;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
x+=min(i,j);
y+=i*j;
}
}
printf("%lld %lld\n",x,y-x);
return 0;
}