首页 > 其他分享 >动态规划部分题目代码记录

动态规划部分题目代码记录

时间:2024-11-21 18:17:55浏览次数:1  
标签:include 题目 shu int 代码 long 动态 ll dp

A

点击查看代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 105;
#define ll long long
ll t, shu[N], n;

int main() {
    cin >> t;
    shu[1] = 1; shu[0] = 1;
    for (int i = 2; i < 82; i++)
        shu[i] = shu[i - 1] + shu[i - 2];
    //cout << shu[80] << endl;
    while (t--) {
        cin >> n;
        cout << shu[n] << endl;
    }
    return 0;
}
B
点击查看代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 5, mod = 1e9 + 7;
int n, t;
long long shu[N];

void  chu() {
    shu[1] = 3; shu[2] = 9; shu[3] = 24;
    for (int i = 4; i < N; i++) {
        shu[i] = shu[i - 1] * 3 % mod;
        shu[i] -= 2 * shu[i - 3];
        shu[i] = (shu[i] +2* mod) % mod;
    }
}

int main() {
    chu();
    cin >> t;
    while (t--) {
        cin >> n;
        cout << shu[n] << endl;
    }
    return 0;
}

C

点击查看代码
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
const int n = 1e5 + 5, mod = 1e9 + 7;
ll n, t, dp[n];

void  chu() {
    for (ll i = 3; i < n; i++) {
        if (i & 1)
            dp[i] = dp[i / 2] + dp[i / 2 + 1] + 1;
        else
            dp[i] = dp[i / 2] * 2;
    }
}

ll findd(ll n) {
    if (n <= 100000)  return dp[n];
    if (n & 1)
        return findd(n / 2) + findd(n / 2 + 1) + 1;
    else
        return 2 * findd(n / 2);
}

int main() {
    chu();
    cin >> t;
    if (t == 1) {
        cin >> n;
        cout << findd(n) << endl;
    }
    else {
        while (t--) {
            cin >> n;
            cout << dp[n] << endl;
        }
    }
    return 0;
}

D

点击查看代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1005;
int n, dp[N][N], a[N][N];

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= i; j++)
            cin >> a[i][j];
    for (int i = 1; i <= n; i++)
        for (int j = 0; j <= i + 1; j++)
            dp[i][j] = -1e9;
    dp[1][1] = a[1][1];
    for (int i = 2; i <= n; i++)
        for (int j = 1; j <= i; j++)
            dp[i][j] = max(dp[i - 1][j - 1] + a[i][j], dp[i - 1][j] + a[i][j]);
    int rex = -1e9;
    for (int i = 1; i <= n; i++) rex = max(rex, dp[n][i]);
    cout << rex;
    return 0;
}

G

点击查看代码
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
#define ll long long
const int N = 65;
ll n, t, dp1[N][N], dp2[N][N], shu[N][N];
string st[N];

ll gcd(ll a, ll b) {
    return b ? gcd(b, a % b) : a;
}

int main() {
    cin >> n >> t;
    getchar();
    for (int i = 1; i <= n; i++)
        getline(cin, st[i]);
    for (int i = 1; i <= n; i++) {
        int k = 1;
       // cout << st[i] << endl;
        for (int j = 0; j < st[i].size(); j++)
            if (st[i][j] == '*')  shu[i][k++] = 0;
            else if (st[i][j] == '.')  shu[i][k++] = 1;
    }
    int k = 1, r = 1;
    while (shu[k][r])  k += 2, r++;
    dp1[k][r] = 1; dp2[k][r] = 1;
    for (int i = k; i <= n; i++) {
        for (int j = 1; j <=i; j++) {
            if (i != n + 1 && shu[i][j] == 1) dp1[i + 2][j + 1] += 4 * dp1[i][j];
            else dp1[i + 1][j + 1] += dp1[i][j], dp1[i + 1][j] += dp1[i][j];
            //cout << dp1[i][j] << ' ';
        }
        //cout << endl;
    }
    ll p = 1; dp2[n+1][t+1] = pow(2, n+1 - k);
    if (dp1[n + 1][t + 1] == 0) dp2[n + 1][t + 1] = 1;
    else p = gcd(dp1[n + 1][t + 1], dp2[n + 1][t + 1]);
    cout << dp1[n + 1][t + 1] / p << '/' << dp2[n + 1][t + 1] / p ;
    return 0;
}

H

点击查看代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 30;
long long qi[N][N], dp[N][N];
int n, m, x, y;
int X[8]{ 2,2,1,1,-1,-1,-2,-2 }, Y[8]{ 1,-1,2,-2,2,-2,1,-1 };

int main() {
	cin >> n >> m >> x >> y;
	n += 2, m += 2, x += 2, y += 2;
	qi[x][y] = 1;
	//cout << x << ' ' << y << endl;
	for (int i = 0; i < 8; i++)
		if (x + X[i] >= 0 && y + Y[i] >= 0)
			qi[x + X[i]][y + Y[i]] = 1;
	dp[2][2] = 1;
	for (int i = 2; i <= n; i++)
	{
		for (int j = 2; j <= m; j++) {
			if (i == 2 && j == 2||qi[i][j] == 1) continue;
			else dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
			//cout << dp[i][j] << ' ';
		}
		//cout << endl;
	}
	cout << dp[n][m];
	return 0;
}

Q

点击查看代码
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
int v, n, dp[20005];
int shu[35];

int main() {
	cin >> v >> n;
	for (int i = 1; i <= n; i++)
		cin >> shu[i];
	for (int i = 1; i <= n; i++) {
		if (shu[i] > v) continue;
		for (int j = v; j >= shu[i]; j--)
			dp[j]=max(dp[j],dp[j - shu[i]] + shu[i]);
	}
	cout << v - dp[v];
	return 0;
}

R

点击查看代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e3 + 5;
int shu[N], w[N], n, m;
int dp[N];

int main() {
    memset(dp, 0, sizeof(dp));
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
        cin >> shu[i] >> w[i];
    for (int i = 1; i <= m; i++)
        for (int j = n; j >= shu[i]; j--)
            dp[j] = max(dp[j], dp[j - shu[i]] + w[i]);
    cout << dp[n];
    return 0;
}

S

点击查看代码
 //#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
int V, n;
int v[35],p;
ll w[35], dp[20005];

int main() {
	cin >> V >> n;
	for (int i = 1; i <= n; i++){
		cin >> v[i] >> p;
		w[i] = v[i] * p;
	}
	for (int i = 1; i <= n; i++)
		for (int j = V; j >= v[i]; j--)
			dp[j]=max(dp[j],dp[j - v[i]] + w[i]);
	cout << dp[V];
	return 0;
}

标签:include,题目,shu,int,代码,long,动态,ll,dp
From: https://www.cnblogs.com/liyutaocpp/p/18561283

相关文章

  • 使用ENSP实现DHCP+动态路由
    一、项目拓扑   二、项目实现 (1)路由器AR1配置进入系统试图sys将路由器命名为R1sysnameR1关闭信息中心undoinfo-centerenable进入g0/0/0接口intg0/0/0将g0/0/0接口IP地址配置为12.12.12.1/30ipaddress12.12.12.130退出此视图quit创建valn......
  • 动态内存管理
    一:为什么要有动态内存分配?创建变量的本质是向内存申请空间。inta=10;————向内存中申请4个字节的空间来存放10这个整型数据。intarr[10];————在内存中申请一块连续的空间(40个字节)intmath[30];————如果只有20个人,会有10个整型的空间浪费。      ......
  • 无代码靠谱吗?盘点国内top10无代码开发平台
        无代码开发是一种通过拖拽组件、表单、报表等方式,而无需编写代码来搭建应用系统的开发方法。这种方法可以大大提高开发效率,降低开发门槛,使非专业人员也能参与到开发过程中。以下将推荐10个国内无代码平台,并详细介绍它们的功能特点与对接方式。云表......
  • 论传统定制开发与低代码开发的优缺点
    论传统定制开发与低代码开发的优缺点【传统定制开发优缺点】优点缺点【了解低代码平台】【Microi吾码相比其它低代码平台可能存在的优势】【传统定制开发优缺点】优点“我的代码我做主”完全自主可控,不受限于其它平台,不用担心平台的bug自己处理不了不用去熟悉低......
  • JavaScript网页设计案例:动态交互与用户体验提升
        随着前端开发技术的不断发展,JavaScript已经成为现代网页设计中不可或缺的工具。通过JavaScript,开发者可以为用户提供更为流畅、动态的交互体验,让网页不仅具备美观的视觉效果,更能提高用户的参与感和功能实用性。    本文将通过一个实际案例展示如何使用JavaS......
  • 使用 vscode 调试 nodejs 代码
    继前一篇:使用cmake.js在Windows上编译js代码我们已经能在vscode上成功的编译出js代码,那我们该如何断点调试js代码以及js引用的C库源码呢首先要先以Debug模式编译js代码cmake-jscleancmake-jscompile-D找到debug生成的pdb文件,这个很重要,关......
  • 可视化CSS3渐变背景颜色代码生成插件
    在线预览 特效下载 这是一款可以在线生成CSS3渐变背景颜色代码的可视化插件。你可以通过调节界面上给出的颜色、色相、饱和度和亮度滑块,以及渐变方向滑块来生成各种线性渐变,屏幕上会给出相应的CSS3线性渐变代码。该渐变背景颜色插件可以设置的选项有:BaseColor:Hue:色相......
  • 低/无代码平台推荐,国内5家TOP低/无代码盘点
    在当前国内企业界,数字化转型的浪潮愈发汹涌,低/无代码开发平台作为一股强劲的推动力,正逐步成为企业转型升级、提质增效的核心利器。企业为什么需要低/无代码平台?降低门槛,加速转型:低/无代码平台通过提供预置组件与模板,降低了应用开发的难度与门槛,使得非技术人员也能参与到应用开......
  • 代码随想录——二叉树19.最大二叉树
    递归最容易想到,采用先序遍历。1.遍历数组,找出当前区间的最大值;2.使用该最大值作为根节点;3.对数组的左半部分和右半部分递归调用构建最大二叉树。这种方式是标准的分治法,每次递归都需要遍历当前区间,找到最大值。因此,时间复杂度是O(n^2),因为每一层递归都会遍历一遍数组,且递......
  • Python 入门(小白版)の7个基础代码 @Kerin森森
    Python,据说是很好入门的一门编程语言,so它也变成了0基础的我(@Kerin森森)的入门选择,在这里分享一下自己的一些学习记录and心得吧。如果你也和我一样是初学者,那就跟森森一起学习一起进步吧!1.第一个Python程序:HelloWorld每个程序员的旅程几乎都是从打印“Hello,World!”开始的......