kuangbin 专题十二: 基础DP1 Ignatius and the Princess IV

it2025-05-01  6

题目链接: 传送门

#include<iostream> #include<cstring> #include<algorithm> using namespace std; int n, cur, num; int main() { //有多组数据 while(scanf("%d", &n) != EOF) { //输入当前数 scanf("%d", &cur); //统计当前数字都多少个 int t = 1; for(int i = 1; i < n; i++) { scanf("%d", &num); //当前数字的数量为0时,更新当前数字 if(t <= 0) { cur = num; t = 1; } //遇到一样的数字就让当前数字加1 if(num == cur) t++; //遇到不一样的数字就与当前数字抵消掉 else t--; } printf("%d\n", cur); } }

这道dp题可以使用摩尔投票法来做 摩尔投票法大概思路就是每次取第一个数字暂且叫它当前数字这个数字,设一个计数器用于存储这个数字的个数(一开始处使化为1)。把这个当前数字往后与其他数字比较,当遇到相同的数字时,计数器加一;当遇到不相同的数字时,计数器减一。以此类推,直到计数器减到变为0时,就更新当前数字,同时把计数器重置变为1。 按照这个思路就可以做这道题了,具体过程代码中有注释,注意多组输入数据。

最新回复(0)