【每日一题 | 2025】2.10 ~ 2.16

在这里插入图片描述

个人主页:Guiat
归属专栏:每日一题

在这里插入图片描述

正文

1. 【2.10】P8707 [蓝桥杯 2020 省 AB1] 走方格

题目链接:https://www.luogu.com.cn/problem/P8707

【AC_Code】

#include <iostream>
#define IOS ios :: sync_with_stdio(0), cin.tie(0), cout.tie(0);

using namespace std;

int n, m, dp[35][35]; // 元素默认初始化为 0 

int main()
{
	IOS; cin >> n >> m; dp[1][1] = 1;
	for (int i = 1; i <= n; i ++) for (int j = 1; j <= m; j ++)
	{
		if ((i != 1 || j != 1) && (i %2 != 0 || j %2 != 0))
		{
			// dp[x][y] = dp[x - 1][y] + dp[x][y - 1]
			dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
		}
	}
	cout << dp[n][m] << "\n";
	
	return 0;
}

2. 【2.11】P8742 [蓝桥杯 2021 省 AB] 砝码称重

题目链接:https://www.luogu.com.cn/problem/P8742

【AC_Code】

#include <iostream>
#include <cmath>
#define IOS ios :: sync_with_stdio(0), cin.tie(0), cout.tie(0);

using namespace std;

int N, W[110], sum, dp[110][100010], ans;

int main()
{
	IOS; cin >> N; for (int i = 1; i <= N; i ++) cin >> W[i], sum += W[i];
	for (int i = 1; i <= N; i ++) for (int j = sum; j >= 0; j --)
	{
		if (j == W[i]) dp[i][j] = 1;
		else if (dp[i - 1][j]) dp[i][j] = 1;
		else if (dp[i - 1][j + W[i]]) dp[i][j] = 1;
		else if (dp[i - 1][abs(j - W[i])]) dp[i][j] = 1;
	}
	for (int i = 1; i <= sum; i ++) if (dp[N][i]) ans++;
	cout << ans << "\n";
    
    return 0;
}

3. 【2.12】P8786 [蓝桥杯 2022 省 B] 李白打酒加强版

题目链接:https://www.luogu.com.cn/problem/P8786

【AC_Code】

#include <iostream>
#define IOS ios :: sync_with_stdio(0), cin.tie(0), cout.tie(0);

using namespace std;

const int mod = 1e9 + 7;
int N, M, dp[205][105][105];

int main()
{
	IOS; cin >> N >> M; dp[0][0][2] = 1;
	for (int i = 0; i < N + M; i ++) for (int j = 0; j < M; j ++) for (int k = 0; k < M; k ++)
	{
		if (dp[i][j][k])
		{
			if (k > 0) dp[i + 1][j + 1][k - 1] += dp[i][j][k] % mod;
			if (k <= 50) dp[i + 1][j][2 * k] += dp[i][j][k] % mod;
		}
	}
	cout << dp[N + M][M][0] << "\n";	
	
	return 0;
}

4. 【2.13】P8725 [蓝桥杯 2020 省 AB3] 画中漂流

题目链接:https://www.luogu.com.cn/problem/P8725

【AC_Code】

#include <iostream>
#define IOS ios :: sync_with_stdio(0), cin.tie(0), cout.tie(0);

using namespace std;

const int mod = 1e9 + 7;
int D, T, M, f[3010][1510];

int main()
{
	IOS; cin >> D >> T >> M; f[0][M] = 1;
	for (int i = 1; i <= T; i ++) for (int j = 0; j <= M; j ++)
	{
		int len = D + (M - j) - (i - (M - j));
		if (len > 0) f[i][j] = (f[i - 1][j] + f[i - 1][j + 1]) % mod;
	}
	cout << f[T][0] << "\n";
	
	return 0;
}

5. 【2.14】P8667 [蓝桥杯 2018 省 B] 递增三元组

题目链接:https://www.luogu.com.cn/problem/P8667

【AC_Code】

#include <iostream>
#include <algorithm>
#define IOS ios :: sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define int long long

using namespace std;

const int maxn = 1e5 + 10;
int N, a[maxn], b[maxn], c[maxn], cnt;

signed main()
{
	IOS; cin >> N;
	for (int i = 1; i <= N; i ++) cin >> a[i];
	for (int i = 1; i <= N; i ++) cin >> b[i];
	for (int i = 1; i <= N; i ++) cin >> c[i];
	sort(a + 1, a + N + 1), sort(c + 1, c + N + 1);
	for (int i = 1; i <= N; i ++)
	{
		int cnta = lower_bound(a + 1, a + N + 1, b[i]) - a - 1;
		int cntc = upper_bound(c + 1, c + N + 1, b[i]) - c;
		cntc = N - cntc + 1;
		cnt += cnta * cntc;
	}
	cout << cnt << "\n";
	
	return 0;
}

6. 【2.15】P8806 [蓝桥杯 2022 国 B] 搬砖

题目链接:https://www.luogu.com.cn/problem/P8806

【AC_Code】

#include <iostream>
#include <algorithm>
#define IOS ios :: sync_with_stdio(0), cin.tie(0), cout.tie(0); 

using namespace std;

int n, dp[20010], ans;
struct str { int w, v; } a[1010];

bool cmp(str pre, str next) { return pre.w + pre.v <= next.w + next.v; }

int main()
{
	IOS; cin >> n; for (int i = 1; i <= n; i ++) cin >> a[i].w >> a[i].v;
	sort(a + 1, a + n + 1, cmp);
	for (int i = 1; i <= n; i ++) for (int j = a[i].w + a[i].v; j >= a[i].w; j --)
	{
		dp[j] = max(dp[j], dp[j - a[i].w] + a[i].v);
		ans = max(ans, dp[j]);
	}
	cout << ans << "\n";
	
	return 0;
}

7. 【2.16】P8699 [蓝桥杯 2019 国 B] 排列数

题目链接:https://www.luogu.com.cn/problem/P8699

【AC_Code】

#include <iostream>
#define IOS ios :: sync_with_stdio(0), cin.tie(0), cout.tie(0); 

using namespace std;

const int mod = 123456;
int n, k, dp[510][510];

int main()
{
	IOS; cin >> n >> k; dp[1][0] = 1; 
	for (int i = 2; i <= n; i ++)
	{
		dp[i][0] = 2;
		for (int j = 0; j <= i; j ++)
		{
			dp[i +1][j + 1] = (dp[i + 1][j + 1] + dp[i][j] * 2 % mod) % mod;
			dp[i + 1][j + 2] = (dp[i + 1][j + 2] + dp[i][j] * (i - j - 2) % mod) % mod;
			dp[i + 1][j] = (dp[i + 1][j] + dp[i][j] * (j + 1) % mod) % mod;
		}
	}
	cout << dp[n][k - 1] << "\n";
	
	return 0;
 }

结语
感谢您的阅读!期待您的一键三连!欢迎指正!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

【Air】

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

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

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

打赏作者

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

抵扣说明:

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

余额充值