比赛地址戳这里
1001 : 数学题:
求极限:
1002 : maomeng的成就
题解:
对于某一个物品i,我们可以选择他的第一个成就,或者选择第二个成就,又或者不选,这样我们就可以使用dfs,来遍历所有情况。时间复杂度为O(3^10).
#include<bits/stdc++.h>
using namespace std;
const int N=10+5,mod=1e9+7;
typedef long long LL;
int tt[N],m[N],T[N],M[N];
int n,t,ans=0;
void dfs(int i,int time,int sum)
{
//cout<<time<<endl;
if(time<=t)//如果时间小于t就比较。
{
ans=max(sum,ans);
}
if(i>n)return;//超过物品数量就返回。
dfs(i+1,time+tt[i],sum+m[i]);
dfs(i+1,time+T[i],sum+M[i]);
dfs(i+1,time,sum);
}
void solve()
{
scanf("%d %d",&n,&t);
for(int i=1;i<=n;i++)
{
scanf("%d %d %d %d",&tt[i],&m[i],&T[i],&M[i]);
}
dfs(1,0,0);
printf("%d",ans);
}
int main()
{
solve();
}
1003 : maomeng的boss战
在一秒内我们收到的伤害为2n,那么我们就可以先将总血量除掉2n,那么剩下的血量如果大于等于n,那么就表示小z可以扛过这一秒,反之则不行。
#include<bits/stdc++.h>
using namespace std;
const int N=10+5,mod=1e9+7;
typedef long long LL;
int n,m;
void solve()
{
m-=1;//注意血量先减一
int s=2*n;
int cnt=m/2/n,re=m%(2*n);
if(re>=n)cnt++;
printf("%d\n",cnt)