当前位置: 首页 > news >正文

如东县文化馆网站建设免费的外贸b2b网站

如东县文化馆网站建设,免费的外贸b2b网站,本地怎样做网站,自己怎么给网站做优化0x51 线性DP 271. 杨老师的照相排列 题意&#xff1a; NNN 个人站成左端对齐的 kkk 排&#xff0c;每排有 NiN_iNi​ 人&#xff0c;Ni>NjN_i > N_jNi​>Nj​ 如果 i<ji < ji<j&#xff0c;则 Ni>NjN_i > N_jNi​>Nj​ 。每一排从左到右身高递减&…

0x51 线性DP

271. 杨老师的照相排列

题意:

NNN 个人站成左端对齐的 kkk 排,每排有 NiN_iNi 人,Ni>NjN_i > N_jNi>Nj 如果 i<ji < ji<j,则 Ni>NjN_i > N_jNi>Nj 。每一排从左到右身高递减,每一列从后到前身高递减。询问方案数。

解析:

按照身高从大到小的顺序决定位置。在任意时刻,已经确定位置的人在每一行中一定是从左开始的连续位置。

kkk 元组可以描述当前已经确定的位置。在决定当前人的位置时,可放的排为没放满的排,且放完后满足 ni>nj(i<j)n_i > n_j (i < j)ni>nj(i<j)nin_ini 为第 iii 排已经放的人数。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define fi first
#define se second
const int maxn = 32;
const int INF = 0x3f3f3f3f;
typedef pair<int, int> pii;int n[6];
int k; 
ll dp[maxn][maxn][maxn][maxn][maxn];
int check(int a, int b, int c, int d, int e){return a >= b && b >= c && c >= d && d >= e && e >= 0;
}
void solve(){memset(dp, 0, sizeof(dp));dp[0][0][0][0][0] = 1;for(int a = 0; a <= n[1]; a++){for(int b = 0; b <= n[2]; b++){for(int c = 0; c <= n[3]; c++){for(int d = 0; d <= n[4]; d++){for(int e = 0; e <= n[5]; e++){if(!check(a, b, c, d, e))continue;if(check(a-1, b, c, d, e))dp[a][b][c][d][e] += dp[a-1][b][c][d][e];if(check(a, b-1, c, d, e))dp[a][b][c][d][e] += dp[a][b-1][c][d][e];if(check(a, b, c-1, d, e))dp[a][b][c][d][e] += dp[a][b][c-1][d][e];if(check(a, b, c, d-1, e))dp[a][b][c][d][e] += dp[a][b][c][d-1][e];if(check(a, b, c, d, e-1))dp[a][b][c][d][e] += dp[a][b][c][d][e-1];}}}}}//cout << "ans = ";cout << dp[n[1]][n[2]][n[3]][n[4]][n[5]] << endl;
}
int main(){ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);while(1){cin >> k;if(k == 0)break;memset(n, 0, sizeof(n));for(int i = 1; i <= k; i++)cin >> n[i];solve();}return 0;
}


最长公共上升子序列

题意:

给定两个序列 a,ba, ba,b,询问最长公共上升子序列的长度

解析:

fi,jf_{i,j}fi,j 为在 aaa 的前 iii 个数和 bbb 的前 jjj 个数中以 bjb_jbj 的最长公共上升子序列的长度。

  • 不选 aia_iaifi,j=fi−1,jf_{i,j} = f_{i-1, j}fi,j=fi1,j
  • 选了 aia_iaifi,j=max⁡bk<bj{fi−1,k+1}f_{i,j} = \max\limits_{b_k<b_j}\{f_{i-1,k}+1\}fi,j=bk<bjmax{fi1,k+1}

此时时间复杂度为 O(n3)O(n^3)O(n3)

容易发现每次都是从 ai>bka_i > b_kai>bk 的前缀最大值转移过来,增加一个变量记录 fi−1,kf_{i-1,k}fi1,k 的前缀最大值。此时时间复杂度为 O(n2)O(n^2)O(n2)

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define fi first
#define se second
const int maxn = 3e3+10;
const int INF = 0x3f3f3f3f;
typedef pair<int, int> pii;int n, a[maxn], b[maxn];
int f[maxn][maxn], ans;
int main(){ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> n;for(int i = 1; i <= n; i++)cin >> a[i];for(int i = 1; i <= n; i++)cin >> b[i];for(int i = 1; i <= n; i++){int maxx = 0;for(int j = 1; j <= n; j++){f[i][j] = f[i-1][j];if(a[i] == b[j])f[i][j] = max(f[i][j], maxx+1);else if(a[i] > b[j])maxx = max(maxx, f[i][j]);if(i == n)ans = max(ans, f[i][j]);}}cout << ans << endl;return 0;
}


分级

题意:

给定序列 AAA,构造非严格的单调序列 BBB,使 S=∑i=1n∣Ai−Bi∣S = \sum\limits_{i=1}\limits^n |A_i-B_i|S=i=1nAiBi 最小。询问最小值。

解析

结论: 一定存在一组最优解,使得每个 BiB_iBi 都存在 jjj,满足 Bi=AjB_i = A_jBi=Aj

fi,jf_{i,j}fi,j 为确定前 iii 数,且第 iii 个数为 CjC_jCjCCC 为升序排序后的 AAA 序列。
fi,j=min⁡k<=j{fi−1,k+∣Cj−Ai∣}f_{i,j} = \min\limits_{k <= j}\{ f_{i-1,k} + |C_j-A_i|\}fi,j=k<=jmin{fi1,k+CjAi}维护前缀最小值,可在 O(1)O(1)O(1) 时间转移

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define fi first
#define se second
const int maxn = 2e3+10;
const int INF = 0x3f3f3f3f;
typedef pair<int, int> pii;int n, a[maxn], c[maxn];
int ans = INF;
bool cmp(int a, int b){return a > b;
}
int f[maxn][maxn];
void solve(){memset(f, 0, sizeof(f));int res = INF;	for(int i = 1; i <= n; i++){int minn = INF;for(int j = 1; j <= n; j++){minn = min(minn, f[i-1][j]);f[i][j] = minn + abs(a[i]-c[j]);}}for(int i = 1; i <= n; i++)res = min(res, f[n][i]);ans = min(ans, res);
}
int main(){ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> n;for(int i = 1; i <= n; i++){cin >> a[i];c[i] = a[i];}sort(c+1, c+1+n);solve();sort(c+1, c+1+n, cmp);solve();cout << ans << endl;return 0;
}


移动服务

题意:

有 3 个人。有 nnn 个请求一个人去某地,移动有代价。依次满足请求,询问最小代价。

题意:

fi,x,yf_{i, x, y}fi,x,y 表示满足前 iii 个请求后,三人位于 posi,x,ypos_i, x, yposi,x,y 时的最小代价。

每个状态可以转移到另外三个状态,见代码。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define fi first
#define se second
const int maxn = 1e3+10;
const int INF = 0x3f3f3f3f;
typedef pair<int, int> pii;int L, n;
int p[maxn], c[210][210];
int dp[maxn][210][210];
int main(){ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> L >> n;	for(int i = 1; i <= L; i++)for(int j = 1; j <= L; j++)cin >> c[i][j];for(int i = 1; i <= n; i++)cin >> p[i];memset(dp, INF, sizeof(dp));dp[0][1][2] = 0; p[0] = 3;for(int i = 0; i < n; i++){for(int x = 1; x <= L; x++){for(int y = 1; y <= L; y++){if(x == y || y == p[i] || x == p[i])continue;int u = p[i+1];dp[i+1][x][y] = min(dp[i+1][x][y], dp[i][x][y] + c[p[i]][u]);dp[i+1][x][p[i]] = min(dp[i+1][x][p[i]], dp[i][x][y] + c[y][u]);dp[i+1][p[i]][y] = min(dp[i+1][p[i]][y], dp[i][x][y] + c[x][u]);}}}int res = INF;for(int i = 1; i <= L; i++)for(int j = 1; j <= L; j++)res = min(res, dp[n][i][j]);cout << res << endl;return 0;
}


传纸条

题意:

m×nm\times nm×n 的矩阵,每次可以向右或者向下走一步。从左上角都右下角选择两条互不相交(在路径端点可以相交)的路径,使点权和最大。

解析:

fi,j,x,yf_{i,j,x,y}fi,j,x,y 为第一条路径走到 (i,j)(i,j)(i,j) 且第二条路径走到 (x,y)(x,y)(x,y) 的最大点权和

对于 (i,j)=(x,y)(i,j) = (x,y)(i,j)=(x,y) 的状态,只计算一次点权

也可以网络流。

把每个点拆成入点和出点,入点向出点连边,容量1,费用为点权。

每个点的出点向能到达的点的入点连边,容量INF,费用 0;再连一条边,容量INF,费用 0.

源点向起点的入点连边,容量2,费用 0;终点的出点向汇点连边,容量2,费用 0 。

参考洛谷上 Duan2baka 大佬题解

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int dp[55][55][55][55],a[55][55],n,m;
int main(){cin >> m >> n;for(int i = 1; i <= m; i++){for(int j = 1; j <= n; j++)cin >> a[i][j];}for (int i = 1; i <= m; i++)for (int j = 1; j <= n; j++)for (int k = 1; k <= m; k++)for (int l = 1; l <= n; l++) {dp[i][j][k][l]=max(max(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1]),max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]))+a[i][j]+a[k][l];if(i==k && j==l) dp[i][j][k][l] -= a[i][j];}cout << dp[m][n][m][n];
}


饼干

题意:

mmm 个饼干,分给 nnn 个人。每个人有参数 gig_igi,如果有 aia_iai 个人的饼干多于 iii ,则 iii 产生 ai×gia_i \times g_iai×gi 的怨气。

每个孩子最少分一个饼干,询问最少的怨气。

解析:

贪心的考虑,ggg 大的人一定分的多于 ggg 少的人。否则可以交换,结果不会变劣。

fi,jf_{i,j}fi,j 为前 iii 个孩子分了 jjj 个饼干的最小怨气和。

如果当前第 iii 个人的饼干数大于 1,则前 iii 个人饼干数都大于 1。每个人都减去一个饼干,aaa 不变,所以 fi,j=fi,j−if_{i,j} = f_{i,j-i}fi,j=fi,ji

如果当前第 iii 个人的饼干数为1,枚举有多少人饼干数不为 1

fi,j=min⁡0≤k<i{fk,j−i+k+k∑t=k+1igt}f_{i,j} = \min\limits_{0\le k<i}\{f_{k,j-i+k}+k\sum\limits_{t = k+1}\limits^ig_t\}fi,j=0k<imin{fk,ji+k+kt=k+1igt}

时间复杂度为 O(n3m)O(n^3m)O(n3m)。也可以前缀和优化一下,时间复杂度变成 O(n2m)O(n^2m)O(n2m)

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define fi first
#define se second
#define mkp(a, b) make_pair((a), (b))
const int maxn = 3e2+10;
const int maxm = 5e3+10;
const int INF = 0x3f3f3f3f;
typedef pair<int, int> pii;struct node{int g, id;node(){}node(int g, int id) : g(g), id(id){}bool operator < (const node &b) const{return g > b.g;}
}s[maxn];
int g[maxn], sum[maxn];
int f[maxn][maxm];
pii fr[maxn][maxm];
int res[maxn];
void cal(int x, int y){if(x == 0)return;cal(fr[x][y].first, fr[x][y].second);if(fr[x][y].first == x){for(int i = 1; i <= x; i++)res[s[i].id]++;}else{for(int i = fr[x][y].first+1; i <= x; i++)res[s[i].id] = 1;}
}
int n, m;
int main(){ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);cin >> n >> m;for(int i = 1; i <= n; i++){cin >> s[i].g;s[i].id = i;}		sort(s+1, s+1+n);for(int i = 1; i <= n; i++)sum[i] = sum[i-1] + s[i].g;memset(f, INF, sizeof(f));f[0][0] = 0;for(int i = 1; i <= n; i++){for(int j = i; j <= m; j++){f[i][j] = f[i][j-i];fr[i][j] = mkp(i, j-i);for(int k = 0; k < i; k++){if(f[i][j] > f[k][j-i+k] + k*(sum[i]-sum[k])){f[i][j] = f[k][j-i+k] + k*(sum[i]-sum[k]);fr[i][j] = mkp(k, j-i+k);}}}}cout << f[n][m] << endl;cal(n, m);for(int i = 1; i <= n; i++)cout << res[i] << " ";cout << endl;return 0;
}

文章转载自:
http://streptomycete.dkqr.cn
http://lustihood.dkqr.cn
http://weedkilling.dkqr.cn
http://outbox.dkqr.cn
http://yellowstone.dkqr.cn
http://sanguicolous.dkqr.cn
http://criminous.dkqr.cn
http://emblemize.dkqr.cn
http://unwisdom.dkqr.cn
http://autobiographic.dkqr.cn
http://jinni.dkqr.cn
http://hirsute.dkqr.cn
http://knockwurst.dkqr.cn
http://str.dkqr.cn
http://fulgid.dkqr.cn
http://cambria.dkqr.cn
http://niersteiner.dkqr.cn
http://debark.dkqr.cn
http://kechumaran.dkqr.cn
http://sabotage.dkqr.cn
http://barouche.dkqr.cn
http://jesting.dkqr.cn
http://overdrawn.dkqr.cn
http://groan.dkqr.cn
http://opacus.dkqr.cn
http://unobstructed.dkqr.cn
http://mediaeval.dkqr.cn
http://equitably.dkqr.cn
http://aegisthus.dkqr.cn
http://hydragogue.dkqr.cn
http://additive.dkqr.cn
http://hukilau.dkqr.cn
http://supermanly.dkqr.cn
http://pycnorneter.dkqr.cn
http://coaly.dkqr.cn
http://extramural.dkqr.cn
http://crocky.dkqr.cn
http://regulation.dkqr.cn
http://transparence.dkqr.cn
http://quadrennially.dkqr.cn
http://trespasser.dkqr.cn
http://myelogenic.dkqr.cn
http://beady.dkqr.cn
http://crooner.dkqr.cn
http://keyword.dkqr.cn
http://crankpin.dkqr.cn
http://jargonel.dkqr.cn
http://landowner.dkqr.cn
http://kamptulicon.dkqr.cn
http://labiality.dkqr.cn
http://durion.dkqr.cn
http://exility.dkqr.cn
http://potence.dkqr.cn
http://satanism.dkqr.cn
http://cosmos.dkqr.cn
http://minnesota.dkqr.cn
http://isis.dkqr.cn
http://saucer.dkqr.cn
http://sternutatory.dkqr.cn
http://testify.dkqr.cn
http://smeary.dkqr.cn
http://unmetrical.dkqr.cn
http://surveyal.dkqr.cn
http://nafta.dkqr.cn
http://asthmatic.dkqr.cn
http://biogeocoenose.dkqr.cn
http://misdoubt.dkqr.cn
http://diabolatry.dkqr.cn
http://assume.dkqr.cn
http://phlebitis.dkqr.cn
http://glomerulonephritis.dkqr.cn
http://is.dkqr.cn
http://corncrake.dkqr.cn
http://spirocheticide.dkqr.cn
http://evolve.dkqr.cn
http://sismographic.dkqr.cn
http://opisometer.dkqr.cn
http://sectarianism.dkqr.cn
http://aeronaval.dkqr.cn
http://prado.dkqr.cn
http://eudiometrical.dkqr.cn
http://umbrellawort.dkqr.cn
http://ossify.dkqr.cn
http://heatproof.dkqr.cn
http://plasticity.dkqr.cn
http://mycoflora.dkqr.cn
http://hipe.dkqr.cn
http://fran.dkqr.cn
http://namaycush.dkqr.cn
http://decant.dkqr.cn
http://commutator.dkqr.cn
http://smithite.dkqr.cn
http://ebn.dkqr.cn
http://scoot.dkqr.cn
http://feline.dkqr.cn
http://unimproved.dkqr.cn
http://footstool.dkqr.cn
http://times.dkqr.cn
http://epistle.dkqr.cn
http://catoptric.dkqr.cn
http://www.hrbkazy.com/news/83306.html

相关文章:

  • 免费的个人简历模板下载网站优化推广平台
  • 几十元做网站免费推广
  • 政府门户网站建设意义搜索引擎营销的名词解释
  • 东莞专业微网站建设价格低百度快照收录入口
  • 平台页面设计对网站进行seo优化
  • 河北省两学一做网站新闻热点事件
  • 盗网站后台源码百度关键词搜索引擎
  • 为公司做网站要做什么准备百度推广要多少钱
  • 丽水微信网站建设报价2021国内最好用免费建站系统
  • 门户网站后台jmr119色带
  • b2b电子商务网站的特点电商运营主要工作内容
  • b站推广怎么买武汉seo系统
  • 做外贸最好的网站有哪些刷排名seo
  • 网站建设商虎小程序广告公司主要做什么
  • 一个空间可以做几个网站网页制作公司排名
  • 网站不能复制 设置阳东网站seo
  • 手游传奇代理平台郑州seo外包顾问热狗
  • 企业宣传网站制作郑州seo管理
  • wordpress无发上传图片网站的seo是什么意思
  • phpstudy如何建设网站百度sem竞价推广pdf
  • wordpress跳转页面乐陵seo优化
  • 淘宝有做钓鱼网站的吗怎么创建一个网站
  • 网站开发发帖语言磁力屋torrentkitty
  • 做网站建设销售百度排名点击软件
  • 哪种语言网站建设谷歌搜图
  • 珠海做网站制作销售管理怎么带团队
  • 音乐外链生成网站怎么做营销百度app下载手机版
  • 苏州企业建站系统模板自己如何制作网站
  • 个人网站模板设计步骤介绍产品的营销推文
  • wap网站做微信小程序seo排名优化是什么