「EZEC」 Round1 开学信心赛 总结

本文分享了EZEC-1信心赛的解题经验,详细解析了前四题的解题思路,包括成绩处理、出题策略、甜品选择及数列问题。涉及直接模拟、01背包、贪心算法、DP等方法。

「 E Z E C 」 「EZEC」 EZEC R o u n d 1 Round1 Round1 开学信心赛 总结

这次比赛我考了 245 245 245分,还算可以,因为这次题目太变态了。
这次我只讲一下前四题我的想法。
后面两题太变态了。

第一题:「EZEC-1」成绩

解题方法

这道题直接模拟。
数据很良心,没有出一些毒瘤数据。

得分情况

比赛时满分。

代码

注:它的数据太水,如果出毒瘤一点,我肯定卡不过。

#include<bits/stdc++.h>
using namespace std;
char a[10001];
int n,ck;
void dg(int x)
{
	cout<<"0.";
	for(int i=1;i<=x-1;i++)
		cout<<"0";
	cout<<"1";
}
void dg1(int x)
{
	cout<<"1";
	for(int i=1;i<x;i++)
		cout<<"0";
}
int main()
{
	scanf("%s",a+1);
	n=strlen(a+1);
	for(int i=1;i<=n;i++)
	{
		if(a[i]=='.')
		{
			ck=i;
			break;
		}
	}
	if(ck==0)
	{
		int j=n;
		for(int i=1;i<=n;i++)
		{
			if(a[i]=='0') 
			{
				j--;
				continue;	
			}
			cout<<a[i]<<'*';
			dg1(j);
			if(i!=n) cout<<'+';
			j--;
		}
		return 0;
	}
	int j=ck-1;
	for(int i=1;i<=ck-1;i++)
	{
		if(a[i]=='0') 
		{
			j--;
			continue;	
		}
		cout<<a[i]<<'*';
		dg1(j);
		cout<<'+';
		j--;
	}
	j=1;
	for(int i=ck+1;i<=n;i++)
	{
		if(a[i]=='0') 
		{
			j++;
			continue;	
		}
		if(i==n)
		{
			cout<<a[i]<<'*';
			dg(j);
		}
		else
		{
			cout<<a[i]<<'*';
			dg(j);
			cout<<'+';
		}
		j++;
	}
}

第二题:「EZEC-1」出题

解题方法

对于 k = 0 k=0 k=0的做法,直接跑一遍 01 01 01背包。
对于 n ≤ 10 n\leq10 n10的做法,直接暴力搜索。
对于 90 90 90分的做法,直接根据搜索做成 d p dp dp
对于满分的做法,当所有时间小于等于 m m m时,直接贪心(不知道为什么要特判这种情况)。

得分情况

这题有毒瘤数据。
很多人卡 90 90 90分,包括我。
为啥最后一个点要贪心?
我在比完赛加了个特判,满分,what ?

代码

这是满分的代码。

#include<bits/stdc++.h>
using namespace std;
long long n,m,k,a[1001],b[1001],ans,f[4][1001][1001],s;
bool cmp(long long a,long long b)
{
	return a>b;
}
int main()
{
	cin>>n>>m>>k;
	for(long long i=1;i<=n;i++) cin>>a[i]>>b[i],s+=b[i];
	if(s<=m)
	{
		sort(a+1,a+1+n,cmp);
		for(long long i=1;i<=k;i++) ans+=a[i]*2;
		for(long long i=k+1;i<n;i++) ans+=a[i];
		cout<<ans;
		return 0;
	}
	for(long long i=1;i<=n;i++)
	{
		for(long long p=m;p>=b[i];p--)
		{
			for(long long l=0;l<=k;l++)
			{
				f[0][l][p]=max(f[0][l][p],f[0][l][p-b[i]]+a[i]);
				if(l>0) f[0][l][p]=max(f[0][l][p],f[0][l-1][p-b[i]]+a[i]*2);
				f[1][l][p]=max(f[1][l][p],f[0][l][p]);
				if(l>0) f[1][l][p]=max(f[1][l][p],f[1][l-1][p-b[i]]+a[i]*2);
			}
		}
	}
	cout<<f[1][k][m];
}

第三题:「EZEC-1」甜品

解题方法

对于 35 35 35分的方法(最后一个数据卡过),直接暴力搜索。
对于满分的方法, d p dp dp,不懂系列。

得分情况

比赛时 35 35 35分。
我想打记忆化,可是没打成。
注意:要用 s c a n f scanf scanf p r i n t f printf printf才能拿到 35 35 35分,最好用 O 2 O2 O2。否则只能 30 30 30分。

第四题:「EZEC-1」数列

解题方法

对于 20 20 20分的方法,直接暴力。
后面不懂。

得分情况

比赛时 20 20 20分。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值