当前位置: 首页 > news >正文

洛谷蓝桥杯刷题

洛谷P8599蓝桥杯2013省B带分数,枚举题

新知识:位于algorithm中的next_permutation(a,a + n)生成下一个数字的全排列数组。

AC代码:

#include <bits/stdc++.h>
using namespace std;
int n;
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, ans;
int t;
int main() {
    cin >> n;
    while(1){
    	int x = 0;
    	for(int i = 1; i <= 7; i++){
    		x = x * 10 + a[i];
    		int y = 0;
    		for(int j = i + 1; j <= 8; j++){
    			y = y * 10 + a[j];
    			int z = 0;
    			for(int k = j + 1; k <= 9; k++){
    				z = z * 10 + a[k];
				}
				if(y % z == 0 && x + y / z == n)ans++;
			} 
		} 
		next_permutation(a + 1, a + 9 + 1);
		//检查是否会到开头
		bool ok = 0;
		for(int i = 1; i <= 9; i++){
			if(a[i] != i){
				ok = 1;
				break;
			} 
		} 
		if(!ok)break;
	}
    
    return 0;
}

洛谷P8612地宫取宝

dfs暴力

#include <bits/stdc++.h>
using namespace std;
int n, m, k;
const int N = 55, p = 1e9 + 7;
int mp[55][55];
int ans;
void dfs(int x, int y, int maxv, int num){
	if(x == n + 1 || y == m + 1)return;
	if(x == n && y == m){
		if(num == k || num == k - 1 && mp[x][y] > maxv){
			ans++;
		}
		ans %= p;
		return;
	}
	dfs(x, y + 1, maxv, num);
	dfs(x + 1, y, maxv, num);
	if(mp[x][y] > maxv){
		dfs(x, y + 1, mp[x][y], num + 1);
		dfs(x + 1, y, mp[x][y], num + 1);
	} 
}
int main() {
	cin >> n >> m >> k;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			cin >> mp[i][j];
		}
	}
	dfs(1, 1, -1, 0);
	cout << ans << endl;
	
    return 0;
}

记忆化搜索优化

#include <bits/stdc++.h>
using namespace std;
int n, m, k;
const int N = 55, p = 1e9 + 7;
int mp[N][N];
int dp[N][N][15][15];//记忆化搜索数组 
int dfs(int x, int y, int maxv, int num){//num为东西个数,maxv表示当前的值 
	if(x == n + 1 || y == m + 1)return 0;
	if(dp[x][y][maxv + 1][num] != -1)return dp[x][y][maxv + 1][num];
	long long ans = 0;
	if(x == n && y == m){
		if(num == k || num == k - 1 && mp[x][y] > maxv){
			ans++;
		}
	}
	else{
		ans += dfs(x, y + 1, maxv, num);
		if(mp[x][y] > maxv)ans += dfs(x, y + 1, mp[x][y], num + 1);
		
		ans += dfs(x + 1, y, maxv, num);
		if(mp[x][y] > maxv)ans += dfs(x + 1, y, mp[x][y], num + 1); 
	}
	dp[x][y][maxv + 1][num] = ans % p;
	return dp[x][y][maxv + 1][num];
}
int main() {
	cin >> n >> m >> k;
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= m; j++){
			cin >> mp[i][j];
		}
	}
	memset(dp, -1, sizeof(dp));
	cout << dfs(1, 1, -1, 0) << endl;
	
    return 0;
}

相关文章:

  • CRC校验码的检错性能(三)——基于对偶码重量分布计算漏检概率
  • STM32江科大----IIC
  • 004 Vue Cli脚手架(vue2)
  • 在CentOS上安装Docker需要注意的事项
  • 基于Arduino的ESP8266连接OneNET云平台(MQTT协议 物模型)(一)ESP8266固件烧录
  • Solidity基础入门—web3
  • GitHub 趋势日报 (2025年04月06日)
  • MATLAB中movmin函数用法
  • Python爬虫第5节-urllib的异常处理、链接解析及 Robots 协议分析
  • 深度探索:策略学习与神经网络在强化学习中的应用
  • WHAT - JavaScript 中 Object.defineProperty() 和 Proxy 对比
  • 使用LangChain Agents构建Gradio及Gradio Tools(4)——Gradio Tools:gradio_tools库
  • 小刚说C语言刷题——第17讲 循环之for语句
  • ARM处理器内核全解析:从Cortex到Neoverse的架构与区别
  • 优选算法第七讲:分治
  • 关于如何在 Ansible 中安全使用 `rm -rf` 或类似操作的完整指南
  • C++第14届蓝桥杯b组学习笔记
  • go原子操作和锁的区别是什么?
  • rtthread 软件SPI驱动, 支持mode0~3,MSB,LSB
  • 【C语言】编译和链接
  • 石家庄品牌网站建设/小红书推广方式
  • 临沂网站建设服务/企业网络规划设计方案
  • 国内食品行业网站开发/小红书网络营销策划方案
  • seo怎么给网站做外链/微信朋友圈广告如何投放
  • 注册公司北京/深圳优化网站
  • 青岛专业公司网站设计公司/网站设计与制作