DP::Poj1015 July Compromise

Game Theory: 公平博弈 Notes: The following excerpt is from a book 《GAME THEORY》by Thomas && S.Ferguson and a paper by Ulyssess. 一. 公平聯合博弈 公平聯合博弈(Impartial combi 阅读详情
 

 

初学DP,夜鱼就给我找了这么条难缠的“大鱼”,有点打击到我~~~~

 问题:n個候選人,要挑m個組成陪審團。選人方法:控方和辯方根據喜歡程度為每個候選人打分(0~20),選出的這m個人,必須滿足辯方總分和控方總分的差的絕對值最小。如有多種方案,則選辯控雙方總分之和最大的方案即可。

輸入:1<=n<=200, 1<=m<=20, m<=n; pi,di(i=1,…,n)表控、辯打分數。

解决DP问题的关键在于列出递推方程,除此之外还要证明两点:最优子结构和重叠子问题。关于前者,采用的是“剪贴”技术,本质是反证法,本题的子问题很明显,当考虑i个人时,那么可以从i-1个人的最优方案中获得解的部分。关于后者,本题子问题的规模是越来越小的,直到边界i=1。列递推方程的关键在于有个好的状态描述,本题,子问题规模i个人,差要求最小,在此基础上要求和最大。最后的“要求”往往是“状态”的值,于是不难写出状态s[i,j],而根据该状态的定义,用小一级的子问题来表述之,就是下面所列的方程。s[i,j]表示i个人且差之和为j时所有方案中和之和的最大值。则s[i,j]=max{s[i-1,j-(d[k]-p[k])]+(d[k]+p[k])},(k不在s[i-1,*]中)

本题在输入的时候,是借鉴PKU(1002)的Hint部分,除了下面的格式之外,还可以while(scanf("%d %d", &n, &m),n||m)或while(cin>>n>>m,n||m).

题目最终是要求输出节点的,所以可以用hash表来记录,这样做还有个好处,那就是方程的“(i不在s[i-1,*]中)”部分同时也解决了,因为对访问过且采用的节点可以做记录,从而进行判断。本题是用二维数组来实现的,记号path[][]参考了别人的。

接下来就是算法的核心了,首先是方程的初始状态,也就是边界。因为是max,所以用s[1][20m+a[i]]<b[i]来筛选,并用path作记录。有了s[1][]就可以递推了,用s[i+1][j+a[k]]<s[i][j]+b[k]来筛选。由方程可看出是要用三个for循环的,分别对应i,j,k。注意除此之外最里面的for循环只是用来处理方程的“(k不在s[i-1,*]中)”部分而已。

剩下的部分都是细枝末节了。 

 **************************************************************************

#include "stdafx.h"
#include <algorithm>
#include <iostream>
using namespace std;

int main()
{
 int s[21][805],path[21][805],a[205],b[205],c[21];
 int p,d,n,m,min,cn=0,minus;
//输入
 while(scanf("%d%d", &n, &m)&&n+m){
      for(int i = 1; i <= n; ++i){
           scanf("%d%d", &p, &d);
           b[i] = p+d;
           a[i] = p-d;   
      }
      minus=20*m;
//初始化
      memset(s, -1, sizeof(s));
      memset(path, -1, sizeof(path));
      s[0][minus] = path[0][minus] = 0;
//边界
      for(int i = 1; i <= n; ++i){
          if(s[1][minus+a[i]] < b[i]){
              path[1][minus+a[i]] = i;
              s[1][minus+a[i]] = b[i];
          }
      }
//根据状态方程DP
      int ii,jj;
      for(int i = 1; i < m; ++i){
          for(int j = 0; j < 40*m; ++j){
              if(path[i][j] >= 0){
                  for(int k = 1; k <= n; ++k){
                      if(s[i+1][j+a[k]] < s[i][j]+b[k]){
                          for(jj = j, ii = i; ii >= 1; --ii){
                              if(path[ii][jj] == k) break;
                              jj -= a[path[ii][jj]];
                          }
                          if(ii < 1){
                              path[i+1][j+a[k]] = k;
                              s[i+1][j+a[k]] = s[i][j]+b[k];
                          }
                      }
                  }
              }
          }
      }
//计算最小值min
     for(int j = 0; j <= 40*m; ++j){
         if(s[m][minus+j] >= 0 || s[m][minus-j] >= 0){
             if(s[m][minus+j] > s[m][minus-j])
                  min = minus+j;
             else
                  min = minus-j;
             break;
         }
    }
//沿着路径找节点
    int count=0;
    for(int j=m,k=min; j >= 1; --j){
        c[count++] = path[j][k];
        k -= a[c[count-1]];
    }
    sort(c, c+count);
//打印
    printf("Jury #%d\n", ++cn);
    printf("Best jury has value %d for prosecution and value %d for defence:\n", (s[m][min]+min-minus)/2, (s[m][min]-min+minus)/2);
    for(int i = 0; i < count; ++i)
        printf(" %d",c[i]);
    printf("\n");
 }
 return 0;
}
5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

相关推荐

从零到一:如何用YOLOv8和PyQt5打造一个高效的路面坑洞检测系统

本文详细介绍了如何利用YOLOv8和PyQt5开发一个高效的路面坑洞检测系统。从环境配置、数据采集标注到模型训练优化,再到PyQt5界面开发与系统集成,提供了完整的实战指南。该系统结合深度学习技术,显著提升了道路检测的准确性和效率,适用于各类道路维护场景。

weixin_29047919的博客 308

Compromise (LCS记录路径)

题目链接:https://vjudge.net/contest/244922#problem/Q 参考链接:https://blog.youkuaiyun.com/bmamb/article/details/51333154 Compromise In a few months the European Currency Union will become a reality. However, to...

guozuofeng的博客 319

逻辑漏洞:水平越权、垂直越权靶场练习

水平越权和垂直越权是组织中常见的管理问题,指的是员工在组织中所拥有的权力和责任超出其职位所应具备的范围。 水平越权是指员工在同一级别的职位上超越了其同事的权力和责任范围,通常表现为某个员工在团队中承担了过多的任务或权力,导致其他同事感到不公平或不满。 垂直越权则是指员工在组织中超越了其职位等级的权力和责任范围,通常表现为员工在没有得到上级批准的情况下做出决策或行动,可能会导致组织内部的混乱和冲突。

qq_68163788的博客 2470

图算法

1. 图的基本概念 2. 图的存储结构 (1)邻接矩阵 一般来说,邻接矩阵所占空间与边数无关(不考虑压缩存储),适合于存储稠密图。为了反映一个图的全面信息,通常采用以下类型定义: #define MAXVEX 100 typedef char VertexType;

我以我心照人 1883

一、数学建模层次分析法(AHP)【清风数学建模个人笔记】

层次分析法: 层次分析法主要用于解决评价类问题(例如:选择哪种方案更好、哪位员工、运动员等表现得更优秀) 评价类问题: 分析问题得出评判问题的子标,分别给不同子标赋予权重(权重和要为1) ...

m0_58882109的博客 1万+

改进爬山算法之六:随机重启爬山算法(Random-Restart Hill Climbing,RRHC)

随机重启爬山算法(Random-Restart Hill Climbing,RRHC)是爬山算法的一种改进策略,是一种启发式搜索算法,旨在通过随机重启来克服传统爬山算法容易陷入局部最优解的局限性,并增加找到全局最优解的概率。随机重启爬山算法通过在多次运行中不断尝试不同的初始解,并在每次运行中执行标准的爬山算法,最终选择所有运行中找到的最佳解作为最终结果。(1)计算复杂度:由于需要多次运行爬山算法,因此算法的计算复杂度可能较高,特别是在解空间较大或每次迭代需要较长时间的情况下。

搏博的专栏 2204

貪心::poj1328 radar installation && poj2109 Power of Cryptography && poj2586 Y2K Accounting Bug

貪心,就是步步為贏。 這是ACM知識表里基礎算法中的貪心部分,屬於水題範疇。 1. poj1328 radar installation 題目:照抄了。 Assume the coasting is an infinite straight line. Land is

我以我心照人 1356

从数据到行动:客服运营必分析的8大核心维度

服务运营正从被动响应升级为数据驱动型战略体系。客服中心的海量交互数据能精准反映服务效能、客户体验及运营短板,关键在于实现数据的可视化与可操作化。本文系统剖析了八类核心数据指标:1)客户行为数据(CSAT/NPS/投诉内容);2)通话效率指标(AHT/接通率);3)服务质量(质检体系/情绪识别);4)坐席绩效(FCR/客户评价);5)流程与知识库(转接率/工单时效);6)渠道流量分析;7)异常预警机制;8)成本收益模型。通过构建多维数据分析体系,企业可在客户全生命周期管理中实现服务升级、风险防控与资源

2202_75469062的博客 1400

时间代价分析

(1)主方法,对于具有递归式的方程很有用,其原理是递归树的计算。但此方法不是万能的。比如递归式T(n)=5T(n/5)+n/lgn,就得老老实实地用递归树去计算了。  (2)待续

我以我心照人 1259

30天入门Python(办公篇)——第34天:pandas - 数据处理与分析利器

摘要 本文介绍了Python数据分析库pandas的核心功能,包括数据结构和基本操作。主要内容涵盖:1) Series和DataFrame两种核心数据结构的创建与使用;2) 多种文件格式的读写方法;3) 数据查看、筛选和清洗技巧;4) 基础统计分析功能;5) 数据透视表和交叉表制作;6) 数据排序与合并等变换操作。文章通过大量代码示例演示了pandas在数据处理各环节的应用,适合作为pandas入门的实践指南,帮助读者快速掌握这一强大工具的基本使用方法。

weixin_42636075的博客 303

假新闻检测论文分享(17)CAFE(Cross-modal Ambiguity Learning for Multimodal Fake NewsDetection)

本文首先从信息论的角度对跨模态歧义性学习问题进行形式化描述,利用不同单模态特征之间的分布散度量化其歧义性;然后,提出了一种模糊度感知的多模态假新闻检测方法CAFE。CAFE通过自适应地聚合单模态特征和跨模态关联,即在跨模态歧义性较弱时依赖单模态特征,在跨模态歧义性较强时参考跨模态关联,从而提高假新闻检测精度。提出了跨模态歧义学习问题,这是多模态假新闻检测的一个关键挑战,并提出了一种基于KL散度的方法,通过估计其特征分布的散度来量化文本和图像之间的歧义。

weixin_41964296的博客 1724

DFS.枚舉::poj1753 flip game && poj2965 the Pilots Brothers'refrigerator

枚舉,對於狀態或者搜索空間很少的情況可以用,是一種笨重的聰明方法!! 但有時候可以更深入地挖掘題目,得到更好的算法,例如poj2965 1.poj1753 flip game 題目:一个4*4的棋盤放滿棋子,每個棋子不是白色就是黑色。每次选择任意一个棋子翻轉变成相反的颜色

我以我心照人 1014

成功解决 OllamaError: status code 400, message: model ‘llama3.2:latest‘ not found 报错

本文针对Ollama更新后出现的OllamaError: status code 400, message: model 'llama3.2:latest' not found报错,分析了其根本原因——2026年1月Ollama将Llama 3.2模型命名从llama3.2:latest改为meta-llama/Llama-3.2:7b-instruct等新格式。解决方案包括:1)使用新模型名称;2)升级Ollama SDK;3)查询确认本地可用模型;4)批量更新旧项目脚本。通过正确适配新命名规则,

博客 1398

SCC

注:大部分参见百度百科。 在有向图G中,如果两个顶点vi,vj间有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,

我以我心照人 932

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SCC::poj2186 Popupar Cows && poj2553 The Bottom of A Graph

关于SCC的知识与算法,参见《SCC》一文。这两道题本质是一样的,细微的区别只在于输出而已。夜鱼只给我做前一道题,大概是看到我做的《图算法》的小结里面没有SCC的地位,想给我提个醒。后来我在那篇小结里面补上了SCC,顺便也对SCC的知识梳理了一遍,觉得手痒,网上查了一下还有poj

我以我心照人 909

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

單調隊列::poj2823 Sliding Window

题目: 一个长度为 N 的数组,一个长为 K 的滑动窗体从最左移至最右端, 你只能见到窗口的K个数,每次窗体向右移动一位,如下表: 要找出窗口在各位置时的 max value,min value Window position Min va

我以我心照人 738

DP/單調隊列::poj3250 Bad Hair Day

题目: Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ

我以我心照人 637

OS學習小結

《現代操作系統1~6》總結 Lyle 2011-8-25 一.       操作系統概論         一般計算機系統包含硬件、系統程序和應用程序三個部分。粗略地講,系統程序中最重要的操作系統,它夾在硬件和應用程序之間,其任務就是有效地管理計算機各種資源,使得使用計算機

我以我心照人 606

DP::poj1159 Palindrome

被1112卡了一个多星期,虽然思路很清晰了,各部分的独立跟踪测试也没什么问题,但,就是AC不了!无奈,只好先放着。     今天下午夜鱼又给我布置了一道题目,回文字符,挺有意思的,看完题目我就接着看村上的《当我跑步时 我谈些什么》,还美美地睡了半个小时。这些天实在缺午觉啊!醒来

我以我心照人 580

DP::Poj1050 To the max

题目:给定一个N*N方阵,元素为整数,求连续子阵全部元素和的最大值。   一开始我想直接在二维上解决问题,在构造递归方程的时候令max[k](k=i+j)为大小i*j的子阵的子阵和的最大值,然而下面的例子说明了没有最优子结构 0 -2 -7 0 9 2 -6 2 -4

我以我心照人 548

DP::Poj1088 滑雪

这题不难,状态转移方程很快就写出来 m[i, j]=max{m[i-1, j](下)+1,m[i, j-1](左)+1,m[i+1, j](上)+1,m[i, j+1](右)+1}(若下左上右对应元素比s[i, j]小,则对应的m[ ]就可以出现在方程中) 具体实现的话也很简单

我以我心照人 432

DP.單調隊列::poj1631 Bridging signals

题目大意:两岸的同等数目的信号灯一一对应,连线,从中找出最多的线出来,它们之间互不交叉。只要求输出最大的线条数。   本题不需要画图了,因为画了图会尝试用二维的DP去做,吃力不讨好,既然输入是一维的一个串,而且该串简洁地包含了全部的信息,那么直接DP何乐而不为呢? 通过对例

我以我心照人 408

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 187

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 287

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 559
下一篇: DP::Poj1050 To the max
初四
博客等级 码龄15年 3粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值