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

杭州公司网站html做的小网站

杭州公司网站,html做的小网站,重庆医院网站建设,wordpress的缩略图无法显示P5414 [YNOI2019] 排序 - 洛谷 思路&#xff1a; 可以想到对于任意一个需要换位置的数字&#xff0c;我们不可能换两次及以上&#xff0c;那么这题就可以转化为求一个最大和的最长不递减子序列&#xff0c;最后的答案就是众和减去这个最大和 代码&#xff1a; #include <…

P5414 [YNOI2019] 排序 - 洛谷

思路:

可以想到对于任意一个需要换位置的数字,我们不可能换两次及以上,那么这题就可以转化为求一个最大和的最长不递减子序列,最后的答案就是众和减去这个最大和

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endlvoid solve()
{int n;cin >> n;vector<int> a(n),b(n,0);int sum = 0;for (int i = 0; i < n; i++){cin >> a[i];for (int j = 0; j < i; j++){if (a[j] <= a[i]){b[i] = max(b[i], b[j]);}}b[i] += a[i];sum += a[i];}int mx = 0;for (int i = 0; i < n; i++){mx = max(mx, b[i]);}cout << sum - mx << endl;
}
signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

P2690 [USACO04NOV] Apple Catching G - 洛谷

思路:

这一题让我们求在最多w次换位中能接到的最多苹果数,一个显然的想法就是 定义dp[i]为前i个苹果中能接到的最大值,但是我们发现我们无法判断当前苹果能不能选,所以我们还要一维来判断能不能选当前苹果,这里我们就定义 dp[i][j] 为前 i 个苹果中进行了 j 次换位能获得最大值,这样我们就能判断能否选择了,显然当换位次数是奇数时,我们就能选 2,否则就是选 1

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endlvoid solve()
{int t, w;cin >> t >> w;vector<int> a(t+1);for (int i = 1; i <= t; i++){cin >> a[i];a[i]--;}vector<vector<int>> dp(t + 1, vector<int>(w + 1, 0));for (int i = 1; i <= t; i++){for (int j = 0; j <= w; j++){dp[i][j] = dp[i - 1][j];if(j)dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]);dp[i][j] += (a[i] == j % 2);}}int mx = 0;for (int i = 0; i <= w; i++){mx = max(mx, dp[t][i]);}cout << mx;
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

P2904 [USACO08MAR] River Crossing S - 洛谷

思路:

题目告诉我们载n头牛要ΣM(1~n)的时间,让我们求载完所有牛最少要多少时间

我们定义dp[i] 为运输完前 i 头牛所花费的最短时间

那么转移方程就是 dp[i] = min(dp[i],dp[i - j] + sum[j]),其中sum[j]为运输 j 头牛耗费的时间

感觉是类完全背包问题

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endlvoid solve()
{int n, m;cin >> n >> m;vector<int> w(n+1,0),dp(n+1,1000000000);w[0] = 2 * m;for (int i = 1; i <= n; i++){cin >> w[i];w[i] += w[i - 1];}dp[0] = 0;for (int i = 1; i <= n; i++){for (int j = 1; j <= i; j++){dp[i] = min(dp[i], dp[i - j] + w[j]);}}cout << dp[n] - m;
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

P2946 [USACO09MAR] Cow Frisbee Team S - 洛谷

思路:

由于我们要保证他是F的倍数,但是我们肯定不能直接开一个 0 ~ n*F 的bool数组

那我们就需要转化了,由于我们不需要知道具体的数,我们只需要知道是否是F的倍数,所以我们可以直接开两个维度,定义dp[i][j]为前i个数组成余F为j的方法有几种

那么转移方程就是 dp[i][j] += dp[i-1][j] + dp[i-1][(j - r[i] + F) % F],这里 j - r[i] + F % F代表没选 r[i]之前的余数是多少,加F这个操作是为了防止其为负数,在大数取模中也可看见

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
const int MOD = 1e8;
void solve()
{int n, f;cin >> n >> f;vector<int> r(n + 1);vector<vector<int>> dp(n + 1, vector<int>(f+1, 0));for (int i = 1; i <= n; i++){cin >> r[i];r[i] %= f;dp[i][r[i]] = 1;}for (int i = 1; i <= n; i++){for (int j = 0; j <= f - 1; j++){//不选dp[i][j] += dp[i - 1][j];dp[i][j] %= MOD;//选dp[i][j] += dp[i - 1][(j - r[i] + f) % f];dp[i][j] %= MOD;}}cout << dp[n][0] % MOD;
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

P1806 跑步 - 洛谷

思路:

我们定义dp[i][j]为跑了i圈,且最后一次跑了j圈的方案数量,那么转移就是dp[ i ][ j ] += dp[ i - j ][ k ]

三重循环即可

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endlvoid solve()
{int n;cin >> n;vector<vector<int>> dp(n + 1, vector<int>(n+1,0));for (int i = 1; i <= n; i++){dp[i][i] = 1;}for (int i = 1; i <= n; i++){for (int j = 1; j < i; j++){for (int k = 1; k < j && j+k <= i; k++){dp[i][j] += dp[i-j][k];}}}int res = 0;for (int i = 1; i < n; i++){res += dp[n][i];}cout << res;
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

P1922 女仆咖啡厅桌游吧 - 洛谷

思路:

由于要确保任意的子树都满足桌游和咖啡厅数量一直,所以我们可以直接看叶子节点,只要最下面满足了,那么上面按照下面的递推即可

首先可分配的数量为其叶子节点的数量加上自身,那么最多的可选数量就是 sum / 2,然后算出来后往上递推到节点 1 即可

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
vector<vector<int>> g(100005);
vector<int> dp(100005,0);
void dfs(int son,int fa)
{int point = 1;for (auto s : g[son]){if (s == fa){continue;}if (g[s].size() == 1){point++;}else{dfs(s, son);dp[son] += dp[s];}}dp[son] += point / 2;
}void solve()
{int n;cin >> n;for (int i = 0; i < n-1; i++){int u, v;cin >> u >> v;g[u].push_back(v);g[v].push_back(u);}dfs(1,1);cout << dp[1];
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

P12175 [蓝桥杯 2025 省 Python B] 园艺 - 洛谷

思路:

因为我们要确定间隔,所以我们可以多开一维,定义dp[i][j]前i个树中间隔为j的最长不递减子序列

双重循环即可

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endlvoid solve()
{int n;cin >> n;vector<int> h(n+1);for (int i = 1; i <= n; i++){cin >> h[i];}vector<vector<int>> dp(n + 1, vector<int>(n + 1, 0));for (int i = 1; i <= n; i++){for (int j = 1; j <= n; j++){dp[i][j] = 1;}}int res = 0;for (int i = 2; i <= n; i++){for (int j = 1; j < i; j++){if (h[i-j] < h[i]){dp[i][j] += dp[i - j][j];res = max(res, dp[i][j]);}}}cout << res;
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

P1564 膜拜 - 洛谷

思路:

这里我们可以利用一个技巧,既然要确保二者的人数差不超过m,那我们就可以视2为-1,那么只要abs(sum) <= m 即可,同时如果 abs(sum) = len 时说明这一串都是同一个数

那么定义 dp[i] 为前 i 个分割的最小数

然后按照上面说的双重枚举即可

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endlvoid solve()
{int n, m;cin >> n >> m;vector<int> dp(n+1,1e9),sum(n+1,0);for (int i = 1; i <= n; i++){int x;cin >> x;sum[i] = sum[i - 1] + (x == 1 ? 1 : -1);}dp[0] = 0;for (int i = 1; i <= n; i++){for (int j = 1; j <= i; j++){if (abs(sum[i] - sum[j-1]) == i-j+1 || abs(sum[i] - sum[j-1]) <= m){dp[i] = min(dp[j-1] + 1, dp[i]);}}}cout << dp[n];
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}


文章转载自:

http://ZxAofH8g.Lcxdm.cn
http://nqzavtMo.Lcxdm.cn
http://0jQTowPo.Lcxdm.cn
http://3DVEVEhq.Lcxdm.cn
http://pVFAofY1.Lcxdm.cn
http://ns14aCNv.Lcxdm.cn
http://iOd1ntRX.Lcxdm.cn
http://5QdtVnym.Lcxdm.cn
http://8VGDkkL3.Lcxdm.cn
http://LKWapbj5.Lcxdm.cn
http://TUMavV7V.Lcxdm.cn
http://Uz2mtunh.Lcxdm.cn
http://2rmFziXz.Lcxdm.cn
http://ml94U8yi.Lcxdm.cn
http://aE8qPIRw.Lcxdm.cn
http://oEGP1O24.Lcxdm.cn
http://iJqEs1Se.Lcxdm.cn
http://Qi6oGNVL.Lcxdm.cn
http://6aKP0UWx.Lcxdm.cn
http://3O3U0c2U.Lcxdm.cn
http://UwVI65S6.Lcxdm.cn
http://sASfNhzd.Lcxdm.cn
http://2rT9QN17.Lcxdm.cn
http://ER4DyOAx.Lcxdm.cn
http://ZMllXaUf.Lcxdm.cn
http://yUSKxp0o.Lcxdm.cn
http://cpRYvaso.Lcxdm.cn
http://7YSJoTpu.Lcxdm.cn
http://1kxt0fYX.Lcxdm.cn
http://INbOcUVI.Lcxdm.cn
http://www.dtcms.com/wzjs/721539.html

相关文章:

  • 网站建设太仓《新闻联播》 今天
  • 兴仁县城乡建设局网站如何能把网站做的更大
  • 企业网站需要哪些模块网站建设经验
  • 住房和城乡建设部网站 城市绿地分类网站开发做表格示例
  • 做网站主要用哪种语言个人购物网站建设
  • php网站后台密码破解程序济阳县建设局网站
  • 手机网站建设北京手工活接单在家做有正规网站吗
  • 山东饰品行业网站制作深圳网站建设哪家
  • 安徽专业建网站wordpress标签云添加
  • 南京建设监理协会网站打不开php 用什么做网站服务器吗
  • php网站服务器怎么来网页制作与网站建设 自考
  • 网站制作com cn域名有什么区别flash相册网站源码
  • wdcp备份网站seo网站页面f布局
  • 怎么开网站 第一步怎么做济南建设招标网
  • 怎样做网站系统卓天商务跨境电商
  • 建设资讯网站t恤定制网站
  • ps4gta5网站建设中如何修改wordpress站名
  • 做亚马逊网站一般发什么快递连云港做网站公司
  • 商标查询免费优化seo深圳
  • 自建网站营销是什么意思如何建自己网站
  • 网站假设教程网页编辑软件朱
  • 心理学网站的建设linux wordpress lnmp
  • 昆明做网站软件做面包的公司网站
  • zhon中国建设会计学会网站南京seo按天计费
  • orchard可以做哪些网站个人站长怎么样做网站才不会很累
  • 淮北建站做吉祥物设计看什么网站
  • 设计师常用的网站湖南做网站找谁
  • 专做polo衫的网站泰州网页设计需要多少钱
  • 湘潭做网站价格 q磐石网络电子商务网站建设实训作业
  • 网站开发策略wordpress+添加版权