
动态规划
小元勋
生生不息 摸鱼不止
展开
-
开餐馆--动态规划
一本通Oj 1296 题目分析: 定义为f[i]f[i]f[i]表示到iii且iii必须选的最大值 边界:f[i]=w[i]f[i]=w[i]f[i]=w[i] 转移方程:f[i]=max(f[i],f[j]+w[i])f[i]=max(f[i],f[j]+w[i])f[i]=max(f[i],f[j]+w[i]) Code: #include <bits/stdc++.h> u...原创 2019-07-12 21:16:26 · 391 阅读 · 0 评论 -
动态规划
线性DP: 文件排版 定义f[i]f[i]f[i]表示将第iii个单词放在当前行的最小难看程度 边界f[i]=INF,f[0]=0f[i]=INF,f[0]=0f[i]=INF,f[0]=0 状态转移: f[i]=min(f[i],f[j]+c(i,j))f[i]=min(f[i],f[j]+c(i,j))f[i]=min(f[i],f[j]+c(i,j)) 注意特判一个单词的情...原创 2019-09-22 19:01:38 · 402 阅读 · 0 评论 -
相似基因 -- 动态规划
Luogu 1140 题目分析: 定义f[i][j]f[i][j]f[i][j]表示AAA串到了iii,BBB串到了jjj的最大相似度 边界f[i][j]=−INF.f[0][0]=0f[i][j]=-INF.f[0][0]=0f[i][j]=−INF.f[0][0]=0 f[i][0]=f[i−1][0]+w(−)f[i][0]=f[i-1][0]+w(-)f[i][0]=f[i−1]...原创 2019-09-01 16:54:38 · 317 阅读 · 0 评论 -
尼克的任务--线性动规
Luogu 1280 Code: #include <bits/stdc++.h> using namespace std; #define maxn 10010 #define maxk 10010 int n,k,f[maxn],num=1,sum[maxn]; struct node { int st,la; }e[maxk]; inline void init_() {...原创 2019-08-14 15:19:49 · 151 阅读 · 0 评论 -
杨老师的照相排列--线性DP
ACwing 273 Code: #include <bits/stdc++.h> using namespace std; int n,a[10]; inline void init_() { freopen("a.txt","r",stdin); } void readda_() { while(scanf("%d",&n)!=EOF) { if(!n) ...原创 2019-07-30 10:59:02 · 197 阅读 · 0 评论 -
小A点菜--01背包--求方案数
小A点菜 题目分析: 定义f[i][j]为点前i个菜用完j元的方案数; if(j==a[i]) f[i][j]=f[i-1][j]+1; 如果这个菜的价格刚好可以直接用完j元,那么就有两种方案: 不点这个菜:用点前i-1个菜用完j元的方案 点菜:只点这一个菜直接用完这j元; 那么总方案数就为f[i-1][j]+1 if(j>a[i]) f[i][j]=f[i-1][j]+f[i-1][j-...原创 2019-04-24 21:57:47 · 516 阅读 · 0 评论 -
金明的预算方案--依赖性背包
luogu 1064 Code: #include <bits/stdc++.h> using namespace std; #define maxn 32110 #define maxm 70 int dp[maxm][maxn],c[maxm],w[maxm],n,m,man[maxm],man_f[maxm][maxm]; inline void init_() { fr...原创 2019-05-03 19:37:54 · 192 阅读 · 0 评论 -
机器分配--区间dp
机器分配 题目分析: 定义状态:f[i][j]为前i个公司分配j个机器的最大利益 状态转移:f[i][j]=max(f[i][j],f[i-1][j-k]+a[i][k],k为给这个公司分配多少个机器 边界:给f赋初值为0 注意:我们要让字典序最小,故k需要倒着推; #include <bits/stdc++.h> using namespace std; #define max...原创 2019-04-27 16:59:18 · 334 阅读 · 0 评论 -
传球游戏--动态规划
luogu 1057 题目分析: 定义状态:f[i][k]表示走到i号点用k步的方案数 状态转移:f[i][k]=f[i-1][k-1]+f[i+1][k+1]; 一个点只有可能由它左边的点或右边的点过来,注意枚举顺序,外层循环应为k 考虑边界,f[1][0]=1,f[1][n]=2; Code: #include <bits/stdc++.h> using namespace ...原创 2019-04-27 08:51:28 · 1611 阅读 · 1 评论