首页 > 其他分享 >dp

dp

时间:2022-12-13 17:01:14浏览次数:28  
标签:int s1 namespace -- include dp

P1048 [NOIP2005 普及组] 采药

dp入门题,可以二维做也可以一维做,一维做的时候要倒着做,正着做可能会被一个药物更新好几次,完全背包。

// luogu-judger-enable-o2
#include "iostream"
#include "stdio.h"
using namespace std;
int w[105],val[105];
int dp[105][1005];
int main()
{
    int t,m,res=-1;
    scanf("%d%d",&t,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&w[i],&val[i]);
    }
    for(int i=1;i<=m;i++) 
        for(int j=t;j>=0;j--)  
        {
            if(j>=w[i])
            {
                dp[i][j]=max(dp[i-1][j-w[i]]+val[i],dp[i-1][j]);
            }  
            else
            {
                dp[i][j]=dp[i-1][j];
            }              
        }
    printf("%d",dp[m][t]);
    return 0;
}

B3637 最长上升子序列

数据范围,n^2是刚刚好,就不用二分单调优化了
if(a[i] > a[j] )f[i] = max(f[i] , f[j] + 1 )
1 <= j <= i - 1

#include<bits/stdc++.h>
using namespace std;
long long f[5001];
int n ;
int a[5002]; 
int main () {
	cin >> n ;
	for(int i = 1; i <= n ; i ++){
		cin >> a[i];
		f[i] = 1;
	}
	long long ans = 0; 
	for(int i = 1;  i <= n ; i ++){
		for(int j = 1 ;j < i ; j ++){
			if(a[j] < a[i]){
				f[i] = max(f[i] , f[j] + 1);
			}
			ans = max(ans , f[i]); 
		}
	}
	cout << ans << endl;
}

P1115 最大子段和

继续留恋,还是开启下一段

// luogu-judger-enable-o2
#include <bits/stdc++.h>
using namespace std;
int n , x , z, s;
int main() { 
z =  -100000000;
scanf("%d",&n); 
	for (int i = 0; i< n ; i++){
		scanf ("%d", &x);
		s = max(s + x , x);
	    z  =  max (z , s); 
 	}
cout << z ;
}

P1115 最大子段和

就是最长公共子序列的板子,最后找路径也就是把dp的过程逆了过去。

#include<bits/stdc++.h> 
using namespace std;
int f[3010][3010];
char s1[100010], s2[100010], ans[1000010];
int main()
{
    cin >> s1 + 1 >> s2 + 1; 
   	int len1 = strlen(s1 + 1);
	int len2 = strlen(s2 + 1);
	for(int i = 1; i <= len1; i++)
	{
		for(int j = 1; j <= len2; j++)
		{
	    	f[i][j] = max(f[i - 1][j], f[i][j - 1]);
			if(s1[i] == s2[j])
            {
                f[i][j] = max(f[i][j], f[i - 1][j - 1] + 1);
            }
		}
	}
	int i = len1, j = len2;
	while(f[i][j] > 0)
    {
		if(s1[i] == s2[j])
        {
            ans[f[i][j]] = s1[i];
            i--, j--;
        }
		else
        {
			if(f[i][j] == f[i - 1][j]) i--;
			else j--;
		}
	}
	cout << ans + 1 << endl;
	return 0;
}

标签:int,s1,namespace,--,include,dp
From: https://www.cnblogs.com/wmjlzw1314/p/16979288.html

相关文章

  • DPVS相关QA
    目录​​网卡分发策略​​​​QA​​网卡分发策略分发策略简介rssrss(receiversidescaling)将数据包进行hash分散到网卡的多个接收队列;那么不同的报文的hashkey是不一样......
  • Fight the dialog units, DPI and Large Fonts
    Fightthedialogunits,DPIandLargeFonts Downloaddemoproject(VC++7.1)-54KbDownloadsource-5KbIntroductionResource-baseddialogs......
  • 2934. 插头DP
    给你一个\(n\timesm\)的棋盘,有的格子是障碍,问共有多少条回路满足经过每个非障碍格子恰好一次。如图,\(n=m=4\),\((1,1),(1,2)\)是障碍,共有\(2\)条满足要求的回路。......
  • OpenEuler进行web部署并且创建wordpress数据库
     PS:1.本实验采用华为弹性云服务器ECS,配置见娄嘉鹏老师博客:openEuler中基于LAMP部署WordPress-娄老师-博客园(cnblogs.com)  2.本博客基于计算机基础和程序设计......
  • DPDK — IGB_UIO,与 UIO Framework 进行交互的内核模块[转载]
    转自:https://blog.51cto.com/u_15301988/5181173目录文章目录目录前文列表IGB_UIOIGB_UIO是如何注册PCI设备的?Linux中的PCI设备PCI的BAR(基地址)IGB_UIO如何获得......
  • 洛谷 P1020 导弹拦截(递增子串 DP )
    题目大意:有一个数列,我们要获取一组子串,这个子串必须单调不增。问:(1)最长我们可以获取多长的这种子串(2)这个数列中最多有多少种这种子串解题思路:其中问题一是很典型的DP问题,最......
  • codeforces 594 div2 Ivan the Fool and the Probability Theory (DP 推公式)
    题目大意:现在有n*m个格子。然后我们可以对这些格子染上黑色或者白色。规定每个格子最多允许相邻1个与它同样颜色的格子,问你我们有多少中不同的染色方案。解题思路:首先考虑1*......
  • 洛谷 P1233 木棍加工(贪心,递增子串DP)
    题目大意:有矩形A1,A2......An.每个矩形有长宽w,h。现在已知cost:(1)若矩形a的w,h小于矩形b的w,h,那么没有cost(2)其它情况cost+1.现在已知矩形A1,A2...,问怎么得到最少cost.解题思......
  • 拼多多 2020校招 多多的电子字典(字典树前缀搜索,DP)
    多多鸡打算造一本自己的电子字典,里面的所有单词都只由a和b组成。每个单词的组成里a的数量不能超过N个且b的数量不能超过M个。多多鸡的幸运数字是K,它打算把所有满足条件的......
  • leetcode 139. 单词拆分(BFS 或者 DP)
    题目大意:给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定 s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。......