基础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” ,指的是非关系型 ...
随机推荐
- 几个经典的css技巧
使用 line-height 垂直居中 line-height:24px; 使用固定宽度的容器并且需要一行垂直居中时,使用 line-height 即可(高度与父层容器一致),更多的垂直居中总结可以看 ...
- Ajax返回乱码
1.关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码,contentType的charset是指服务器发送给客户端时的 ...
- requests库的get请求(加上head,加上get参数请求)
#coding:utf-8 # 导入requests import requests # 构建url url = 'http://www.baidu.com' # 发送请求,获取响应 # respon ...
- 计算auc-python/awk
1.自己写的计算auc的代码,用scikit-learn的auc计算函数sklearn.metrics.auc(x, y, reorder=False)做了一些测试,结果是一样的,如有错误,欢迎指正. ...
- 4.keras实现-->生成式深度学习之用变分自编码器VAE生成图像(mnist数据集和名人头像数据集)
变分自编码器(VAE,variatinal autoencoder) VS 生成式对抗网络(GAN,generative adversarial network) 两者不仅适用于图像,还可以 ...
- 014-配置SSH免密钥登录
问题:client端需要免密钥登录服务器server如何配置?1.前提:客户端已安装openssh-client;服务端已安装openssh-server;服务器端22号端口已经打开2.需要密钥登录时 ...
- CFA
拜耳色彩滤波阵列(Bayer Color Filter Array, CFA)是非常有名的彩色图片的数字采集格式.由1/2的G,1/4得R,1/4的B组成. 当Image Sensor向外逐行输出数据 ...
- bug管理工具为开发者工作带来哪些改变?
BUG管理工具的主要功能是对软件开发测试过程中出现的BUG进行跟踪管理,提高开发者的工作效率与工作质量. 在实际工作中,如果没有bug管理工具的帮助,就可能会出现如下一系列的影响: 1.软件测试人员将 ...
- CE寻找游戏基址
什么是游戏基址? 游戏基址是保持恒定的两部分内存地址的一部分并提供一个基准点,从这里可以计算一个字节数据的位置.基址伴随着一个加到基上的偏移值来确定信息准确的位置(绝对地址). 全局基址 一级基址 二 ...
- caffe 中base_lr、weight_decay、lr_mult、decay_mult代表什么意思?
在机器学习或者模式识别中,会出现overfitting,而当网络逐渐overfitting时网络权值逐渐变大,因此,为了避免出现overfitting,会给误差函数添加一个惩罚项,常用的惩罚项是所有权 ...