相对成功与相对失败--dp

题目:【题目】2023RAICOM编程设计初赛原题_rc-u5 相对成功与相对失败-CSDN博客

思路:题目中说的情况默认为没有说谎,就是0,其他情况就是说谎1,从1到n开始累加,每次取最小的情况(dp统计的就是说谎人数),要是不说谎满足条件就是+0,不然就+1,这样一直到n+1就是n个人的最小说谎人数

dp',我们从i=2开始统计1到第i个以j结尾的最小修改次数,初始化的时候填写的情况为0,其他就代表说谎,赋值为1,然后正序遍历,i为k时,i-1可以取【k,3】,这就是k的范围,取到dpi-1【k】的最小值,dpik+=mi,这就是当前i以k结尾的最小值,然后一直到n+1,输出最小即可

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
#define N 100011
typedef long long ll;
typedef pair<ll,int> pii;
#define inf 0x3f3f3f3f
int t;
int n;
int f(int x,int y)
{
	if(x==1&&y==0) return 3;
	if(x==1&&y==1) return 2;
	if(x==0&&y==1) return 1;
	return 2;
} 
struct no
{
	int x,y;
};
bool cmp(no a,no b)
{
	if(a.x==1&&b.x==0) return true;
	if(a.x==0&&b.x==1) return false;
	if(a.x==b.x&&b.y==1&&a.y==0) return true;
	if(a.x==b.x&&b.y==0&&a.y==1) return false;
	if(a.x==b.x&&b.y==a.y) return true;
}
int b[N],dp[N][5],a[N];
int main() {
	cin>>t;
	while(t--)
	{
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			int x,y;cin>>x>>y;
			a[i]=f(x,y);
			
		}
		for(int i=1;i<=n;i++) for(int j=1;j<=3;j++) dp[i][j]=1;
		for(int i=1;i<=n;i++) cin>>b[i];
		for(int i=1;i<=n;i++) dp[i][a[b[i]]]=0;
		for(int j=1;j<=3;j++) dp[n+1][j]=0;
		for(int i=2;i<=n+1;i++)
		{
			for(int k=3;k>=1;k--)
			{
			int mi=dp[i-1][3];
			for(int j=2;j>=k;j--)
			{
				mi=min(dp[i-1][j],mi);
			}
			dp[i][k]+=mi;	
			}
		}
		int ma=INT_MAX;
		for(int k=3;k>=1;k--) ma=min(ma,dp[n+1][k]);
		cout<<ma<<endl;
	}
	return 0;
}
相关推荐
专注仿真2 小时前
引擎扩展性与集成设计深度剖析:从 14 个扩展点到 DIS→HLA 演进之路
开发语言·算法·仿真引擎·推演引擎
码爸2 小时前
支持向量机介绍与示例
算法·机器学习·支持向量机
怕浪猫2 小时前
2028编程圈很火的10个Skills
算法·面试·github
Nil2086 小时前
leetcode 198打家劫舍
算法·leetcode·职场和发展
Shaoshing7 小时前
前缀和与差分
java·数据结构·算法·前缀和·差分
loulanyue_7 小时前
构建房产认知决策智能:Harness底座与AI自进化的技术实践——读贝壳首席算法科学家尹俊希2026云栖专场演讲
人工智能·算法
碧海银沙音频科技研究院8 小时前
基于炬芯ATS录音卡BLE控制协议
人工智能·嵌入式硬件·算法·语音识别
suhan8 小时前
【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)
数据结构·后端·算法
姜鱼问生8 小时前
Docker Volume 备份与恢复实战:不停机迁移数据
后端·算法·架构
suhan8 小时前
【数据结构】三、栈和队列:5.顺序队列(循环队列)(初始化,判空判满,入队,出队,实例)
数据结构·后端·算法