NewOJ Week 1---CDE

题目链接

C. 凑二十四—dfs+表达式求值

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define int long long

int p[13];
int a[13];
int res=0,n;

int sum()
{
	int op[13]={0},nums[13]={0};
	for(int i=1;i<=n;i++)op[i]=p[i],nums[i]=a[i];
	
	for(int i=1;i<n;i++)
		if(op[i]==2)
			nums[i+1]*=nums[i],op[i]=op[i-1],nums[i]=0;
	
	int sum=nums[1];
	for(int i=1;i<n;i++)
	{
		if(op[i]==0)sum+=nums[i+1];
		else sum-=nums[i+1];
	}
	return sum;
}

void dfs(int u)
{
	if(u==n)
	{
		if(sum()==24)res++;
		return ;
	}
	for(int i=0;i<3;i++)
	{
		p[u]=i;
		dfs(u+1);
	}
}

signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	dfs(1);
	cout<<res<<'\n';
}

D.矩形—LIS变形

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long

int n;
pair<int,int>rt[110];
int f[110];
signed main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int a,b;cin>>a>>b;
		if(a>b)swap(a,b);
		rt[i]={a,b};
	}
	sort(rt+1,rt+n+1);
	for(int i=1;i<=n;i++)
	{
		f[i]=1;
		for(int j=1;j<i;j++)
		{
			if(rt[i].first>rt[j].first&&rt[i].second>=rt[j].second||rt[i].first>=rt[j].first&&rt[i].second>rt[j].second)
			f[i]=max(f[i],f[j]+1);
		}
	}
	int res=0;
	for(int i=1;i<=n;i++)res=max(res,f[i]);
	cout<<res<<'\n';
}

E.团队赛—二分图的最大匹配

#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector> 
using namespace std;
#define int long long
vector<int>g[510];
int cx[510],cy[510];
bool vis[510];
bool st[510];
bool dfs(int u)
{
	for(auto v : g[u])
	{
		if(!vis[v])
		{
			vis[v]=1;
			if(cy[v]==-1||dfs(cy[v]))
			{
				cx[u]=v;
				cy[v]=u;
				return true;
			}
		}
	}
	return false;
}
signed main()
{
	int n,m,r,T,K;
	cin>>n>>m>>r>>T>>K;
	while(K--)
	{
		int u,v;
		cin>>u>>v;
		g[u].push_back(v);
	}
	memset(cx,-1,sizeof cx);
	memset(cy,-1,sizeof cy);
	int res1=0,res2=0;
	for(int i=1;i<=T/r;i++)
	{
		for(int u=1;u<=n;u++)
		{
			if(st[u]==0)
			{
				memset(vis,0,sizeof vis);
				if(dfs(u))
				{
					res1++;
					res2+=i*r;
				}
				else st[u]=1;
			}
		}
	}
	cout<<res1<<" "<<res2<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_WAWA鱼_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值