许久没做,这次还是后面做的。
A:
只需要判断除去最大mugs的和是否大于cup就行。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int inf=1<<29;
int n,s;
int main()
{
while(scanf("%d%d",&n,&s)!=EOF)
{
int maxi=0,sum=0;
for(int i=0;i<n;i++)
{
int val;
scanf("%d",&val);
maxi=max(maxi,val);
sum+=val;
}
if(sum-maxi<=s)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
B:
二分暴力分解就行了,只要不是奇数就不断的尝试缩小
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=101;
int n,m,a[maxn][maxn];
bool Is(int i,int j)
{
for(int k=0;k<m;k++)
if(a[i][k]!=a[j][k])
return false;
return true;
}
bool Check(int mid,int n)
{
for(int i=mid-1,j=0;i>=mid-n;i--,j++)
if(!Is(i,mid+j))
{
return false;
}
return true;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
scanf("%d",&a[i][j]);
int ans=n,val=n;
while(!(val&1))
{
val/=2;
bool is=true;
for(int i=val;i<n;i+=val)
if(!Check(i,val))
{
is=false;
break;
}
if(is)
ans=val;
}
printf("%d\n",ans);
}
return 0;
}
C:
这个题最开始想着用DP做,后来发现直接暴力+贪心就行,枚举答案的起点和终点,然后从大到小尝试替换。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int inf=1<<29;
const int maxn=300;
struct Node
{
int val;
int index;
bool operator < (const Node &a)const{
return val<a.val;
}
}b[maxn];
int n,k,a[maxn],dp[maxn],sum[maxn],num[maxn];
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum[i]=sum[i-1]+a[i];
b[i].val=a[i];
b[i].index=i;
}
sort(b+1,b+n+1);
int ans=-inf;
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
{
int s=sum[j]-sum[i-1];
int cnt=0;
for(int l=1;l<=n;l++)
if(k&&b[l].index>=i&&b[l].index<=j)
{
num[cnt++]=b[l].val;
if(cnt>=k)
break;
}
for(int l=n,now=0;l>=1;l--)
if(k&&(b[l].index<i||b[l].index>j))
{
if(now<cnt)
{
if(num[now]<b[l].val)
{
s-=num[now++];
s+=b[l].val;
if(now==k)
break;
}
else
break;
}
else
{
if(b[l].val>0)
{
s+=b[l].val;
if(++now>=k)
break;
}
else
break;
}
}
//printf("SSSSSSSSSSS %d %d %d\n",i,j,s);
ans=max(ans,s);
}
printf("%d\n",ans);
}
return 0;
}