首页 > 其他分享 >8.10 找规律+动态规划

8.10 找规律+动态规划

时间:2024-08-13 14:53:55浏览次数:7  
标签:return 规律 int max cin vector 动态 8.10 dp

    • nowcoder训练
  • 小q的数列
    找规律,第一个答案很好算,第二个答案打表,发现是二进制里面一的个数减一
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 2e5 + 5;

string s;
vector<pair<int,int>>car(101);
int d=0;
int ex,ey;
int sx,sy;
int f[2];

int maxx(int a,int b,int c){
	int cnt=max(a,b);
	return max(cnt,c);
}

int ca(int x){
	if(x==1){
		return f[1];
	}else if(x==0)return f[0];
	
	return ca(x/2)+f[x%2];
}


int32_t main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	f[1]=1;
	f[0]=0;
	int q=1;
	cin >> q;
	while (q--) {
		int n;
		cin>>n;
		int ans=ca(n/2)+f[(n%2)];
		int res=(1ll << ca(n)) - 1;
		cout<<ans<<' '<<res<<'\n';
		
	}
	
	return 0;
}

  • 魔法
    建议偶尔回来看看多做,一个比较典的三维dp,状态转移方程如下
d p i , j , k = max ( d p i , j , k , d p i 1 , j , k a i , j , d p i , j 1 , k a i , j )

表示为消耗同次数下从两个方向转移过来,当次数大于 0 的时候还需要考虑从两个方向直接用魔法不消耗体力转移过来:

d p i , j , k = max ( d p i , j , k , d p i 1 , j , k 1 , d p i , j 1 , k 1 ) [ k > 0 ]

k最大为n+m ,即从一直使用魔法达到(n+m).
代码

#include <bits/stdc++.h>
 
using namespace std;
 
using i64 = long long;
 
int main() {
   ios::sync_with_stdio(false);
   cin.tie(nullptr);
 
   int n, m, h;
   cin >> n >> m >> h;
 
   vector a(n + 1, vector<int>(m + 1));
   for (int i = 1; i <= n; i ++)
      for (int j = 1; j <= m; j ++)
         cin >> a[i][j];
 
   vector dp(n + 1, vector<vector<i64>>(m + 1, vector<i64>(n + m + 1)));
 
   dp[1][1][0] = h;
 
   for (int i = 1; i <= n; i ++) {
      for (int j = 1; j <= m; j ++) {
         for (int k = 0; k <= n + m; k ++) {
            dp[i][j][k] = max({dp[i][j][k], dp[i - 1][j][k] - a[i][j], dp[i][j - 1][k] - a[i][j]});
            if (k > 0) {
               dp[i][j][k] = max({dp[i][j][k], dp[i - 1][j][k - 1], dp[i][j - 1][k - 1]});
            }
         }
      }
   }
 
   i64 ans = 0;
   for (int i = 0; i < n + m; i ++)
      if (dp[n][m][i] > 0) {
         ans = i;
         break;
      }
 
   cout << ans << '\n';
 
   return 0;
}

标签:return,规律,int,max,cin,vector,动态,8.10,dp
From: https://www.cnblogs.com/dontian/p/18351839

相关文章

  • Day 41 动态规划 Part09 开始炒股
    动态规划解题步骤确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组121.买卖股票的最佳时机这道题虽然自己做出来了,但是做了后面的题再回头看它就有了不一样的理解。curMin更重要的代表了一种状态,代表遍历到当前时间时最低的股......
  • 基于ssm+vue.js+uniapp的基于冲突动态监测算法的健身房预约系统附带文章和源代码部署
    文章目录前言详细视频演示具体实现截图技术栈后端框架SSM前端框架Vue持久层框架MyBaits系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • C语言和C++中的动态内存管理------malloc和free的区别
    引言:动态内存管理:需要根据具体情况来设定需要的内存大小,同时可能需要大于1Mbyte的连续空间。此时我们无法使用静态数组。原因是因为静态数据的开辟是在栈空间,其次栈空间的大小在连续分配时不能超过1Mbyte,因此引入了动态内存管理。C语言C语言中动态内存管理的有四个函数:mal......
  • 如何在栈上动态分配内存?
    alloca是一个非标准的函数,用于在栈上分配内存。与malloc不同,alloca分配的内存会在当前函数返回时自动释放,不需要也不能显式地调用free来释放它。这使得alloca在需要快速分配和释放小块内存时非常方便,但也带来了一些使用上的风险。1.基本用法#include<iostream>#in......
  • 动态规划(三)
    F.序列删除有 ......
  • vue3 设置动态 ref 并获取
    <template><el-tabsv-model="tabs.activeComp"type="border-card"class="ownCollections"@tab-change="tabsChange"><el-tab-panev-for="(item,key)intabs.components......
  • 「代码随想录算法训练营」第三十五天 | 动态规划 part8
    121.买卖股票的最佳时机题目链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/文章讲解:https://programmercarl.com/0121.买卖股票的最佳时机.html题目难度:简单视频讲解:https://www.bilibili.com/video/BV1Xe4y1u77q题目状态:有一半的思路思路一:贪心对......
  • 安装local-path-provisioner基于HostPath动态制备PV
    目录一、背景二、安装local-path-provisioner1、地址2、更改local-path-provisioner使用的默认存储路径3、创建文件并提权4、创建NameSpace5、应用local-path-storage6、验证相关资源状态三、设置local-path为defaultSC四、使用StorageClass动态制备PV1、创建PVC2、创建......
  • 动态添加页面
    方式一:<div><spanclass="smartText2"style="margin-top:60px;"@click="handleTips('近期俄乌事件的态势分析')">近期俄乌事件的态势分析</span></div><div><spanclass="smartText2......
  • 提升SEO与网站可爬性 :动态生成sitemaps和robots.txt文件
    本文由ChatMoney团队出品在现代Web开发中,搜索引擎优化(SEO)是网站成功的关键因素之一。搜索引擎通过网络爬虫来索引网页,而sitemaps和robots.txt文件则是帮助这些爬虫更好地理解和索引网站内容的重要工具。sitemaps简介Sitemap(站点地图)是一种XML文件,它包含了网站上的所有URL以......