基础dp 记录
51nod 1134 最长递增子序列
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rep(i,l,r) for (int i=l; i<=r; i++)
typedef long long ll;
using namespace std;
const int N = 5e4+;
int n, s[N];
int dp[N]; int main(){
freopen("in.txt","r",stdin);
//freopen("a.out","w",stdout); scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d", &s[i]);
memset(dp,0x3f,sizeof(dp));
for(int i=;i<=n;i++) {
int l = lower_bound(dp+,dp++N,s[i])-(dp);
dp[l] = s[i];
}
int ans = lower_bound(dp+,dp++N,0x3f3f3f3f)-dp -;
cout << ans<<endl;
return ;
}
51nod 1050 循环数组最大子段和
考虑 成环的一个最大字段和 要么是正常的字段和 要么是整个环的总和 - (负的最大的 最小子段和)
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e4+;
int a[maxn],b[maxn],n;
typedef long long ll; ll solve (int *s)
{
ll ans =,res =;
for(int i=;i<n;i++)
{
ans+=s[i];
res = max(res,ans);
if(ans < )
ans =;
}
return res;
} int main ()
{ scanf("%d",&n);
ll res=;
for(int i=;i<n;i++)
{
scanf("%d",&a[i]);
b[i] = -a[i];
res += a[i];
}
ll ans1= solve(a),ans2=solve(b);
res= max(ans1,res+ans2);
printf("%lld\n",res);
return ;
}
51nod 1183 编辑距离
dp[i][j] 表示s1[i]和s2[j] 匹配好的,最小需要的花费
所以 dp[i][j] = min ( dp[i-1][j] + 1 //把s1[i] 删除 或者 添加s2[j]
dp[i][j-1] + 1 //把s2[j] 删除 或者 添加 s1[i]
dp[i-1][j-1] + (s1[i]==s2[j]) // 是否需要修改
#include <iostream>
#include <cstring>
#include <string.h>
using namespace std;
char s1[],s2[]; int dp[][]; int min(int a,int b,int c) {
if(b < a)
a = b;
return min(a,c);
} int main () {
scanf("%s %s", s1+, s2+);
int l1 = strlen(s1+);
int l2 = strlen(s2+);
memset(dp,0x3f,sizeof(dp));
for(int i=;i<=l1;i++)
dp[i][] = i;
for(int i=;i<=l2;i++)
dp[][i] = i; for(int i=; i<=l1; i++) {
for(int j=; j<=l2; j++) {
dp[i][j] = min(dp[i-][j]+,
dp[i][j-]+,
(dp[i-][j-]+(s1[i]!=s2[j]?:)));
//printf("%d ",dp[i][j]);
}
//puts("");
}
cout << dp[l1][l2] <<endl;
return ;
}
51nod 1051 最大子矩阵和
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int N = ;
int n,m;
ll s[N][N], sum[N][N]; int main ()
{
scanf("%d %d", &m, &n);
for(int i=;i<=n;i++) {
for(int j=;j<=m;j++) {
scanf("%lld", &s[i][j]);
}
}
//保存每行的信息
for(int i=;i<=n;i++) {
for(int j=;j<=m;j++) {
sum[i][j] = sum[i][j-] + s[i][j];
}
}
ll mx = ;
for(int len=;len<=m;len++) {
for(int i=;i+len-<=m;i++) { //[i,j]i列到j列
int j = i+len-;
ll ans = ;
ll res = ;
for(int k=;k<=n;k++) {
//mx = max();
ans += sum[k][j] - sum[k][i-];
if(res < ans) res = ans;
if(ans < ) ans=;
}
mx = max(res,mx);
}
}
cout << mx <<endl;
return ;
}
51nod 1086 背包问题 V2
#include <bits/stdc++.h>
using namespace std; const int MAXW = +;
const int N = ;
typedef long long ll;
ll dp[MAXW];
int v[N],val[N],cnt[N];//体积 价值 数量 int n,w;
int main () {
//freopen("in.txt","r",stdin);
scanf("%d %d", &n, &w);
for(int i=;i<=n;i++) {
scanf("%d %d %d", &v[i], &val[i], &cnt[i]);
}
for(int i=;i<=n;i++) {
if(cnt[i]*v[i]>= w) {
for(int j=v[i]; j<=w; j++) {
dp[j] = max(dp[j], dp[j-v[i]] + val[i]);
}
}else {
int k=, tot = cnt[i];
while(k<tot) {
for(int j=w; j>=k*v[i]; j--) {
dp[j] = max(dp[j], dp[j-k*v[i]]+k*val[i]);
}
tot-=k;
k<<=;
}
for(int j=w;j>=tot*v[i];j--) {
dp[j] = max(dp[j], dp[j-tot*v[i]]+val[i]*tot);
}
}
}
cout << dp[w] <<endl;
return ;
}
51nod 1101 换零钱
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int mod = 1e9+;
const int N = ;
int coin[] ={,,,,,,,,,,,,};
ll dp[N]; int main () {
int n;
scanf("%d",&n);
dp[] =;
for(int i=; i<; i++) {
for(int j=coin[i]; j<=n; j++) {
dp[j] = (dp[j] + dp[j-coin[i]])%mod;
}
}
cout << dp[n] <<endl;
return ;
}
51nod 1270 数组的最大代价
dp[i][0] : 表示当前A[i] 为1的最大代价
dp[i][1] : 表示当前A[i] 为B[i]的最大代价
#include <bits/stdc++.h>
using namespace std; typedef long long ll;
const int N =+; ll b[N],dp[N][]; int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%lld",&b[i]);
for(int i=;i<=n;i++) {
dp[i][] = max(abs(-)+dp[i-][], abs(-b[i-])+dp[i-][]);
dp[i][] = max(abs(b[i]-)+dp[i-][], abs(b[i]-b[i-])+dp[i-][]);
}
cout << max(dp[n][], dp[n][])<<endl;
}
基础dp 记录的更多相关文章
- 基础dp
队友的建议,让我去学一学kuangbin的基础dp,在这里小小的整理总结一下吧. 首先我感觉自己还远远不够称为一个dp选手,一是这些题目还远不够,二是定义状态的经验不足.不过这些题目让我在一定程度上加 ...
- 「kuangbin带你飞」专题十二 基础DP
layout: post title: 「kuangbin带你飞」专题十二 基础DP author: "luowentaoaa" catalog: true tags: mathj ...
- C#基础知识记录一
C#基础知识记录一 static void Main(string[] args) { #region 合并运算符的使用(合并运算符??) 更多运算符请参考:https://msdn.microsof ...
- DataBase MongoDB基础知识记录
MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...
- MarkDown基础语法记录
基础语法记录,其中有一些博客园暂不支持 <!--标题--> # 一级标题 # ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 一级标题 ...
- 基础DP(初级版)
本文主要内容为基础DP,内容来源为<算法导论>,总结不易,转载请注明出处. 后续会更新出kuanbin关于基础DP的题目...... 动态规划: 动态规划用于子问题重叠的情况,即不同的子问 ...
- PAT L3-001 凑零钱(01背包dp记录路径)
韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是 ...
- hdu 5586 Sum 基础dp
Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Desc ...
- MongoDB基础知识记录
MongoDB基础知识记录 一.概念: 讲mongdb就必须提一下nosql,因为mongdb是nosql的代表作: NoSQL(Not Only SQL ),意即“不仅仅是SQL” ,指的是非关系型 ...
随机推荐
- sass,less的安装及sass的教程
装scss(window) 首相安装ruby http://www.sasschina.com/install/ scss转译css http://www.cnblogs.com/52css/arch ...
- oracle(五)tkprof 使用 transient kernal profile 侧面 轮廓
1.show parameter sql_trace value是false表示系统当前不会产生trace文件 2.使产生trace文件 alter session set sql_trace = t ...
- 005-spring boot 2.0.4-jdbc升级
一.概述 Springboot2默认数据库连接池选择了HikariCP为何选择HikariCP理由一.代码量理由二.口碑理由三.速度理由四.稳定性理由五.可靠性HikariCP为什么这么快优化并精简字 ...
- [django]JsonResponse序列化数据
def home(request): data = { 'name': 'maotai', 'age': 22 } import json return HttpResponse(json.dumps ...
- 图练习-BFS-从起点到目标点的最短步数(sdut 2830)邻接边表
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2830 题目描述 在古老的魔兽传说中,有两个军团 ...
- 字母统计-map
题目描述 输入一行字符串,计算其中A-Z大写字母出现的次数 输入描述: 案例可能有多组,每个案例输入为一行字符串. 输出描述: 对每个案例按A-Z的顺序输出其中大写字母出现的次数. 示例1 输入 复制 ...
- 阿里云安装docker 指定版本
sh docker-install.sh 1.12.6 #ubuntu16.4 测试通过 #!/bin/sh set -e # # This script is meant for quick &am ...
- c++实现web服务框架
lamada表达式 声明一个返回数组指针的函数 返回指针数组的函数形式如下所示: 括号必须存在 注意->后不能加() Lambda表达式
- Bootstrap学习笔记-栅格系统
栅格系统的原理就是在这个界面中这个栅格被分成12个格子,你根据自己的想要的布局就把这个界面分割成你想要的部分就行了.一般如果我们用电脑作为显示器的我们用的样式是col-md 如果你用的显示期变小的情况 ...
- #C++初学记录(算法2)
A - Game 23 Polycarp plays "Game 23". Initially he has a number n and his goal is to trans ...