轉移dp簡單數學數論

1.轉移dp問題

昨天的練習賽上有一個很好玩的起終點問題,第一時間給出bfs的寫法。

但是寫到后面發現不行,還得是的dp轉移的寫法才能完美的解決這道題目。

每個格子可以經過可以不經過,因此它的狀態空間是2^(n*m),但是n,m的數據范圍是500,顯然是不可取的。bfs適用于計數或者最短距離,而不是最大和或最優路徑問題。

故:對于最大和的問題dp是最合適的選擇。

題目意思:

給定起點終點,每個點只能經過一次,找到最大的路徑和,并且只能向下向右走動。

思路:

既然是dp那么一點有初始化,很容易想到第一列一定是固定的,因為該列只能像下走動(從起始點開始)。

那么之后我們就對每一列賦值(從第一列開始,每一列的狀態都是從前面一列轉移過來的)。

對于某一列的賦值,我們可以從頭開始往下走,也可以是從尾開始走到第一行在進行繼續走,那么這里就分成了兩種情況。

我們先任意求出一種情況,然后在慢慢的用前綴和進行維護(因為是一條線下的,前綴和維護方便)。(畢)

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int nima=8e18;
int a[504][504];
void solve(){int n,m;cin>>n>>m;int s,t;cin>>s>>t;s--,t--;for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>a[i][j];}}vector<vector<int>> dp(n,vector<int>(m,-nima));//這里的dp[i][j]的意思是從[s][0]開始到[i][j]的最大貢獻// 初始化第一列的值int sum=a[s][0];for(int i=s;;){//一共要遍歷s次dp[i][0]=sum;  // 初始化環形路徑的第一個點i=(i+1)%n;     // 環形移動sum+=a[i][0];   // 累加路徑上的值if(i==s) break; // 回到起點時結束}// 動態規劃處理每一列for(int i=1;i<m;i++){int cnt=-nima;int sum=0;vector<int> pre(n);  // 前綴和數組// 正向遍歷,計算從上方轉移的最大值for(int j=0;j<n;j++){cnt=max(cnt,dp[j][i-1]-sum);  // 維護最大值,從左邊過來的sum+=a[j][i];                   // 累加當前列的值dp[j][i]=cnt+sum;              pre[j]=sum;                     // 記錄前綴和,這個sum是列環形狀態下的前綴和}cnt=-nima;// 反向遍歷,處理環形路徑的情況for(int j=n-1;j>=0;j--){if(j!=n-1) dp[j][i]=max(dp[j][i],cnt+pre[j]);// 計算從下方轉移的最大值(考慮環形路徑)if(j!=0) cnt=max(cnt,dp[j][i-1]+pre[n-1]-pre[j-1]);}}cout<<dp[t][m-1]<<endl;
}signed main(){int ac=1;while(ac--)  solve();return 0;
}

2.簡單數學

這次的團隊賽有個簡單數學問題,挺有意思的。

題目意思:

給出一個數組,找出最大貢獻(每個貢獻是相鄰兩個數字之差的絕對值)。

思路:

我們可以根據題目給的樣例找到....

1 2 3 4 5 6 的最大貢獻是9,即(3,4)(2,5) (1,6)狀態下貢獻是最大的。

我們進行改變之后發現....

3 2 1 4 5 6的最大貢獻也是9,即(1,4)(2,5)(3,6)狀態下貢獻是最大的。

之后在進行任意舉列子之后我們發現....

一組數據進行排序后每次最大貢獻取法是首位找(畢)

小tips:數學問題,大膽猜,先排序,然后...(看看能不能瞎貓碰到死耗子)

#include<bits/stdc++.h>
using namespace std;
#define int long longinline void solve(){int n; cin >> n;vector<int> a(2 * n);for(int i = 0; i < 2 * n; i++) cin >> a[i];sort(a.begin(), a.end());//排序int answer = 0;for(int i = 0; i < n; i++) {answer+= abs(a[i] - a[2 * n - 1 - i]);//首位之差,參考1 2 3 4 5 6這個樣例}cout << answer << endl;
}signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t; cin >> t;while(t--) solve();return 0;
}

3.數論

這次的數論有點點繞...

?題目意思:

給定一個數是好數m,只有m形如k!或者為偶數的條件下才成立。

給定一個數a,找到最少的分類情況k,使得k個好數之后是a。

思路:

觀察題目的數據范圍我們看到,n<=10^12,而且有t組數據,最好做一個狀態壓縮。

我們先對階乘進行賦初值,15!>10^12。

每次減去1到15的階乘,最后加上二進制中1的個數就是答案,每次枚舉維護一個最小值即可。(畢)

#include <bits/stdc++.h>
using namespace std;
#define int long long 
#define pii pair<int, int> 
vector<int> v;inline void solve() {int sum = 1,i=1;  // 初始化階乘結果為 1while(sum<=1e12){sum*=i++;v.push_back(sum);}//sort(v.begin(), v.end());  // 對向量 v 進行排序// 去除重復的階乘結果//v.erase(unique(v.begin(), v.end()), v.end());int m = v.size();  int n;cin >> n; int ans = 1e9 + 7;// 遍歷所有可能的子集(通過位掩碼的方式)for (int i = 0; i <= (1 << m) - 1; i++) {int res = n;  // 初始化 res 為 n// 遍歷每一位,檢查是否在子集中for (int j = 0; j < m; j++) {if ((1 << j) & i)  // 如果第 j 位在子集 i 中res -= v[j];  // 從 res 中減去對應的階乘值}if (res < 0) continue;  // 如果 res 為負數,跳過當前子集// 計算當前子集的位數和剩余數的位數之和,并更新最小值ans = min(ans, (int)__builtin_popcountll(res) + __builtin_popcountll(i));}cout << ans << endl;
}
signed main() {int nc;cin >> nc;while (nc--) solve();  
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82156.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82156.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82156.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IP查詢基礎介紹

IP 查詢原理 IP 地址是網絡設備唯一標識&#xff0c;IP 查詢通過解析 IP 地址獲取地理位置、運營商等信息。目前主流的 IPv4&#xff08;32 位&#xff09;與 IPv6&#xff08;128 位&#xff09;協議&#xff0c;前者理論提供約 43 億地址&#xff0c;后者地址空間近乎無限。…

Linux命令簡介

1 Linux系統的命令概述 在 Linux 操作系統中&#xff0c;凡是在字符操作界面中輸入能夠完成特定操作和任務的字符串都可以稱為命令。嚴格來說&#xff0c;命令通常只代表實現某一類功能的指令或程序的名稱。 1.1 Shell Linux 命令的執行必須依賴于 Shell 命令解釋器。Shell …

WebRTC與RTSP|RTMP的技術對比:低延遲與穩定性如何決定音視頻直播的未來

引言 音視頻直播技術已經深刻影響了我們的生活方式&#xff0c;尤其是在教育、醫療、安防、娛樂等行業中&#xff0c;音視頻技術成為了行業發展的重要推動力。近年來&#xff0c;WebRTC作為一種開源的實時通信技術&#xff0c;成為了音視頻領域的重要選擇&#xff0c;它使得瀏覽…

多通道振弦式數據采集儀MCU安裝指南

設備介紹 數據采集儀 MCU集傳統數據采集器與5G/4G,LoRa/RS485兩種通信功能與一體的智能數據采集儀。該產品提供振弦、RS-485等的物理接口&#xff0c;能自動采集并存儲多種自然資源、建筑、橋梁、城市管廊、大壩、隧道、水利、氣象傳感器的實時數據&#xff0c;利用現場采集的數…

Vue3 + Element Plus表格篩選樣式設置

如果彈出框掛載在 body 下&#xff08;而非組件內部&#xff09;&#xff0c;scoped 樣式無法生效&#xff0c;這時就需要使用全局樣式。 強制全局樣式 1、添加全局樣式文件&#xff08;或在原有的文件中添加以下內容&#xff09; src/assets/global.scss /* 全局強制樣式覆…

vue--ofd/pdf預覽實現

背景 實現預覽ofd/pdf超鏈接功能 業務實現 pdf的預覽 實現方式&#xff1a; 直接使用 <iframe :src"${url}#navpanes0&toolbar0" /> 實現pdf的預覽。 navpanes0 隱藏側邊欄toolbar0 隱藏頂部工具欄 使用pdf.js&#xff0c;代碼先行&#xff1a; <tem…

【C++20新特性】ranges::sort()使用方法,優勢,注意點

以下是關于 ranges::sort() 的詳細說明&#xff1a; 1. ranges::sort() 的使用方法 ranges::sort() 是 C20 引入的基于范圍&#xff08;Ranges&#xff09;的排序函數&#xff0c;其語法更簡潔&#xff0c;支持直接操作容器或范圍對象。 (1)基本用法 #include <vector&g…

深入理解設計模式之適配器模式

深入理解設計模式之適配器模式 1. 適配器模式概述 適配器模式(Adapter Pattern)是一種結構型設計模式&#xff0c;它允許將一個類的接口轉換為客戶端所期望的另一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的類能夠協同工作&#xff0c;扮演了"轉換器&quo…

【數據結構 · 初階】- 快速排序

目錄 一. Hoare 版本 1. 單趟 2. 整體 3. 時間復雜度 4. 優化&#xff08;搶救一下&#xff09; 4.1 隨機選 key 4.2 三數取中 二. 挖坑法 格式優化 三. 前后指針&#xff08;最好&#xff09; 四. 小區間優化 五. 改非遞歸 快速排序是 Hoare 提出的一種基于二叉樹…

第2周 PINN核心技術揭秘: 如何用神經網絡求解偏微分方程

1. PDEs與傳統數值方法回顧 (Review of PDEs & Traditional Numerical Methods) 1.1 什么是偏微分方程 (Partial Differential Equations, PDEs)? 偏微分方程是描述自然界和工程領域中各種物理現象(如熱量傳播、流體流動、波的振動、電磁場分布等)的基本數學語言。 1.…

Neo4j(二) - 使用Cypher操作Neo4j

文章目錄 前言一、Cypher簡介二、數據庫操作1. 創建數據庫2. 查看數據庫3. 刪除數據庫4. 切換數據庫 三、節點、關系及屬性操作1. 創建節點與關系1.1 語法1.2 示例 2. 查詢數據2.1 語法2.2 示例 3. 更新數據3.1 語法3.2 示例 4. 刪除節點與關系4.1 語法4.2 示例 5. 合并數據5.1…

RabbitMQ的Web管理頁面給我看懵了,這都什么意思啊

文章目錄 OverviewTotalsMessage RatesQueued Messages NodesChurn StatisticsPorts and ContextsExport DefinitionsImport Definitions ConnectionsChannelsExchangesQueuesAdmin他們之間的關聯 在上一篇文章中我們講到了如何在Windows中安裝Rabbitmq&#xff0c; 小白也能搞…

安全基礎與協議分析

5.1 Web安全基礎 5.1.1 Web安全基礎概覽&#xff08;一、二&#xff09; Web安全的核心目標是保護Web應用及其數據免受攻擊&#xff0c;涵蓋以下關鍵領域&#xff1a; 攻擊面&#xff1a; 前端漏洞&#xff08;XSS、CSRF&#xff09;。 后端漏洞&#xff08;SQL注入、RCE&a…

STM32項目實戰:ADC采集

STM32F103C8T6的ADC配置。PB0對應的是ADC1的通道8。在標準庫中&#xff0c;需要初始化ADC&#xff0c;設置通道&#xff0c;時鐘&#xff0c;轉換模式等。需要配置GPIOB的第0腳為模擬輸入模式&#xff0c;然后配置ADC1的通道8&#xff0c;設置轉換周期和觸發方式。 接下來是I2C…

第十四章:數據治理之數據源:數據源的數據接入、業務屬性梳理及監控

本章開始&#xff0c;將進入9大模塊的介紹。第一個模塊我們先介紹&#xff1a;數據源。數據源是整個數據中臺數據的來源&#xff0c;是一個起點。更好的管理好數據源這個起點&#xff0c;是數據治理的一個好的開始。 在【數據&#xff1a;業務生數據&#xff0c;數據生“萬物”…

【C/C++】多線程開發:wait、sleep、yield全解析

文章目錄 多線程開發&#xff1a;wait、sleep、yield全解析1 What簡要介紹詳細介紹wait() — 條件等待&#xff08;用于線程同步&#xff09;sleep() — 睡覺&#xff0c;定時掛起yield() — 自愿讓出 CPU 2 區別以及建議區別應用場景建議 3 三者協作使用示例 多線程開發&#…

阿里云CDN刷新預熱--刷新URL

文章目錄 一、全英文URL刷新預熱二、摻雜中文的URL刷新預熱2.1 對帶中文URL進行編碼2.2 預熱刷新 三、CDN刷新-核心作用與價值3.1 核心作用3.2 核心價值3.3 典型使用場景 *最后我想說&#xff1a;請你不要相信我說的每一句話&#xff0c;這只是我的個人經驗* 一、全英文URL刷新…

Oracle 19c DG備庫報錯ORA-00313、ORA-00312、ORA-27037

Oracle 19c DG備庫報錯ORA-00313、ORA-00312、ORA-27037 錯誤排查問題處理錯誤排查 DG同步完成后,DG Broker show database發現以下告警信息: Database Warning(s):ORA-16826: apply service state is inconsistent with the DelayMins propertyORA-16789: standby redo log…

開源與閉源之爭:AI時代的創新博弈與未來抉擇

在人工智能技術狂飆突進的今天&#xff0c;開源與閉源之爭已不再局限于技術圈的討論&#xff0c;而是演變為一場關乎技術倫理、商業格局乃至人類文明走向的深度博弈。當Meta的Llama 3開源模型下載量突破百萬&#xff0c;當OpenAI的GPT-5繼續加固技術壁壘&#xff0c;這場沒有硝…

NIFI的處理器:JSLTTransformJSON 2.4.0

該處理器使用JSLT轉換FlowFile JSON有效負載的格式。使用轉換后的內容創建新的FlowFile&#xff0c;并將其路由到“成功”關系。如果JSLT轉換失敗&#xff0c;則將原始FlowFile路由到“失敗”關系。 需要注意的是&#xff0c;編譯JSLT轉換可能相當昂貴。理想情況下&#xff0c…