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

线性动态规划3

P1541 [NOIP 2010 提高组] 乌龟棋

做法1:记忆化搜索

#include<bits/stdc++.h>
using namespace std;
const int N = 360;
int a[N], b[5], dp[55][55][55][55]; 
int n, m;
int dfs(int pos){int sum = 0;if(pos == n)return a[n];if(dp[b[1]][b[2]][b[3]][b[4]])return dp[b[1]][b[2]][b[3]][b[4]];for(int i = 1; i <= 4; i++){if(b[i] == 0)continue;b[i]--;sum = max(sum, dfs(pos +i));b[i]++;} sum += a[pos];dp[b[1]][b[2]][b[3]][b[4]] = sum;return sum;
}
signed main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >> m;for(int i = 1; i <= n; i++)cin >> a[i];for(int i = 1; i <= m; i++){int x; cin >> x;b[x]++;}cout << dfs(1) << endl; return 0;
}

做法2:动态规划

由二维到四维写

#include<bits/stdc++.h>
using namespace std;
int a[360], b[5];
int dp[45][45][45][45];void solve(){int n, m; cin >> n >> m;for(int i = 1; i <= n; i++)cin >> a[i];for(int i = 1; i <= m; i++){int x; cin >> x;b[x]++;}dp[0][0][0][0] = a[1];for(int x1 = 0; x1 <= b[1]; x1++){for(int x2 = 0; x2 <= b[2]; x2++){for(int x3 = 0; x3 <= b[3]; x3++){for(int x4 = 0; x4 <= b[4]; x4++){int z = a[1 + x1 + x2 * 2 + x3 * 3 + x4 * 4];if(x1 != 0)dp[x1][x2][x3][x4] = max(dp[x1][x2][x3][x4], dp[x1 - 1][x2][x3][x4] + z);if(x2 != 0)dp[x1][x2][x3][x4] = max(dp[x1][x2][x3][x4], dp[x1][x2 - 1][x3][x4] + z);if(x3 != 0)dp[x1][x2][x3][x4] = max(dp[x1][x2][x3][x4], dp[x1][x2][x3 - 1][x4] + z);if(x4 != 0)dp[x1][x2][x3][x4] = max(dp[x1][x2][x3][x4], dp[x1][x2][x3][x4 - 1] + z);}}}}cout << dp[b[1]][b[2]][b[3]][b[4]] << endl;
}
signed main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);solve();return 0;
}

P4310 绝世好题

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int dp[35][N];
int a[N], b[35];
void solve(){int n; cin >> n;for(int i = 1; i <= n; i++)cin >> a[i];for(int i = 1; i <= 31; i++)b[i] = 1 << (i - 1);for(int i = 1; i <= n; i++){int maxx = 0;for(int j = 1; j <= 31; j++){if(a[i] & b[j])maxx = max(maxx, dp[j][i - 1]);}maxx++;for(int j = 1; j <= 31; j++){if(a[i] & b[j])dp[j][i] = maxx;else dp[j][i] = dp[j][i - 1];}}int ans = 0;for(int i = 1; i <= 31; i++)ans = max(ans, dp[i][n]);cout << ans << endl;
}
signed main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);solve();return 0;
}

 优化1:

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int dp[35];
int a[N], b[35];
void solve(){int n; cin >> n;for(int i = 1; i <= n; i++)cin >> a[i];for(int i = 1; i <= 31; i++)b[i] = 1 << (i - 1);for(int i = 1; i <= n; i++){int maxx = 0;for(int j = 1; j <= 31; j++){if(a[i] & b[j])maxx = max(maxx, dp[j]);}maxx++;for(int j = 1; j <= 31; j++){if(a[i] & b[j])dp[j] = maxx;else dp[j] = dp[j];}}int ans = 0;for(int i = 1; i <= 31; i++)ans = max(ans, dp[i]);cout << ans << endl;
}
signed main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);solve();return 0;
}

优化2:

#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int dp[35];
int a[N], b[35];
void solve(){int n; cin >> n;for(int i = 1; i <= n; i++)cin >> a[i];for(int i = 1; i <= 31; i++)b[i] = 1 << (i - 1);for(int i = 1; i <= n; i++){int maxx = 0;for(int j = 1; b[j] <= a[i]; j++){if(a[i] & b[j])maxx = max(maxx, dp[j]);}maxx++;for(int j = 1; b[j] <= a[i]; j++){if(a[i] & b[j])dp[j] = maxx;else dp[j] = dp[j];}}int ans = 0;for(int i = 1; i <= 31; i++)ans = max(ans, dp[i]);cout << ans << endl;
}
signed main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);solve();return 0;
}

相关文章:

  • 软考 系统架构设计师系列知识点之杂项集萃(56)
  • Unity中AssetBundle使用整理(一)
  • Java NIO 文件处理接口
  • GO语言-导入自定义包
  • Linux基础io知识
  • [超详细,推荐!!!]前端性能优化策略详解
  • 如何实现并运用责任链模式
  • 当虚拟照进现实——《GTA6》如何重新定义开放世界的可能性‌
  • Python3安装HTMLTestRunner
  • 【Tools】Visual Studio使用经验介绍(包括基本功能、远程调试、引入第三方库等等)
  • 使用lldb看看Rust的HashMap
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(十七)
  • 害怕和别人发生冲突怎么办? --deepseek
  • lampiao靶场渗透
  • springboot3学习
  • Problem E: 实现冒泡排序(内存优化)
  • Linux常见指令解析(三)
  • 《打造自己的DeepSeek》第2期:怎么安装自己的DeepSeek?
  • 【Tools】VScode远程调试linux服务器(打断点可视化界面方式)
  • 基于VSCode+PlatformIO环境的ESP8266的HX1838红外模块
  • 微软将在全球裁员6000人,目标之一为减少管理层
  • 重庆发布经济犯罪案件接报警电子地图,企业可查询导航属地经侦服务点
  • 中国海警舰艇编队5月14日在我钓鱼岛领海巡航
  • 国务院关税税则委员会关于调整对原产于美国的进口商品加征关税措施的公告
  • 李公明谈“全球南方”与美术馆
  • 中国恒大:清盘人向香港高等法院申请撤回股份转让