Winning an Auction 博弈dp_博弈a-程序员宅基地

技术标签: 算法  博弈论  思维  动态规划  dp  

Alice and Bob play an auction game. Alice has A dollars and Bob has B dollars initially. There are N items on sale. In each round, an item will be sold by the following way. Alice writes down an integer a (0 ≤ a ≤ A) and Bob writes down an integer b (0 ≤ b ≤ B), which are the amount of dollars they want to pay for the item. If a > b, then Alice gets the item and pays a dollars to the seller. If a < b, then Bob gets the item and pays b dollars to the seller. If a = b, then for the 1st, 3rd, 5th, 7th … round, Alice gets the item and pays a dollars; for the 2rd, 4th, 6th, 8th … round, Bob gets the item and pays b dollars. Since all the items have the same value, the goal of the auction game is to get as many items as possible. Both Alice and Bob know the values of N,A and B. Your task is to calculate how many items they will get if both of them play optimally.

输入
The first line is the number of test cases. Each test case contains 3 integers N,A and B, which are no larger than 255.

输出
For each test case, output the number of items Alice and Bob will get if both of them play optimally.

样例输入 Copy
3
1 1 2
2 4 2
3 3 3

样例输出 Copy
Alice 0 Bob 1
Alice 1 Bob 1
Alice 2 Bob 1

【题意】
t组样例,每组给n轮,一人有a钱,一人有b钱,问最后结果

【思路】
博弈的重点是,每次对新的一句博弈a,b分别拿出多少来争取新的这局,最后结果如何
显然拿出东西来博弈,结果还不如不拿,那就没必要继续拿东西出来了

#pragma GCC optimize(3,"Ofast","inline")
#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
int dp[256][256][256],t,n,x,y;
int main()
{
    
    for(int i=0;i<256;i++)
        for(int j=0;j<256;j++){
    
            if(i>=j)dp[1][i][j]=1;
            else  dp[1][i][j]=0;
        }
    for(int i=2;i<256;i++)
        for(int a=0;a<256;a++)
            for(int b=0;b<256;b++){
    
                if(i&1){
    
                    int va=dp[i-1][a][b]+1,vb;
                    for(int add=1;;add++){
    
                        if(add>b||(vb=dp[i-1][a][b-add])>=va){
    
                            dp[i][a][b]=va;
                            break;
                        }
                        if(add>a||(va=dp[i-1][a-add][b]+1)<=vb){
    
                            dp[i][a][b]=vb;
                            break;
                        }
                    }
                }else
                {
    
                    int vb=dp[i-1][a][b],va;
                    for(int add=1;;add++){
    
                        if(add>a||(va=dp[i-1][a-add][b]+1)<=vb){
    
                            dp[i][a][b]=vb;
                            break;
                        }
                        if(add>b||(vb=dp[i-1][a][b-add])>=va){
    
                            dp[i][a][b]=va;
                            break;
                        }
                    }
                }
            }
    scanf("%d",&t);
    while(t--)
    {
    
        scanf("%d%d%d",&n,&x,&y);
        printf("Alice %d Bob %d\n",dp[n][x][y],n-dp[n][x][y]);
    }
    return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51182010/article/details/126855768

智能推荐

ctf 网络安全比赛简介_简单的ctf竞赛-程序员宅基地

文章浏览阅读1k次。MISC(安全杂项):全称Miscellaneous。题目涉及流量分析、电子取证、人肉搜索、数据分析、大数据统计等等,覆盖面比较广。我们平时看到的社工类题目;给你一个流量包让你分析的题目;取证分析题目,都属于这类题目。主要考查参赛选手的各种基础综合知识,考察范围比较广。PPC(编程类):全称Professionally Program Coder。题目涉及到程序编写、编程算法实现。算法的逆向编写,批量处理等,有时候用编程去处理问题,会方便的多。当然PPC相比ACM来说,还是较为容易的。_简单的ctf竞赛

数学建模预测方法之 微分方程模型_微分方程预测模型-程序员宅基地

文章浏览阅读6.7k次,点赞7次,收藏42次。微分方程模型适用于基于相关原理的因果预测模型,大多是物理或几何方面的典型问题,假设条件,用数学符号表示规律,列出方程,求解的结果就是问题的答案。短、中、长期的预测都适合。反应事物内部规律及其内在关系,但由于方程的建立是以局部规律的独立性假定为基础,当作为长期预测时,误差较大,且微分方程的解比较难以得到。传染病的预测模型、经济增长(或人口)的预测模型、Lanchester战争预测模型、药物在体内的分布与排除预测模型、烟雾的扩散与消失模型..._微分方程预测模型

C#调用Oracle数据库_c# oracle-程序员宅基地

文章浏览阅读3.8k次。目前为止所用过的c#访问orale数据库的方式有两种,一种是使用 Oracle.ManagedDataAccess.Client方式来调用,另一种是使用System.Data.OracleClient方式来调用,两者的区别是第一种方式是最新的方式,使用起来也比第二种方式要简单的多,但是缺点可能无法访问旧版的Oracle数据库例如 9i,尤其是当oracle数据库的各种权限、角色等各种参数由于各种原因不允许对其修改时可能会无法访问的情况,第二种方式是一种过时的方式,它的优点是可以弥补第一种方..._c# oracle

Network_Card/DR600VX-Qualcomm-Atheros-QCA9880-2T2R-MIMO-802.11ac-Mini-PCIe-Wi-Fi-Module-Dual-Ba_dr600vx网卡-程序员宅基地

文章浏览阅读328次。https://www.wallystech.com/Network_Card/DR600VX-Qualcomm-Atheros-QCA9880-2T2R-MIMO-802.11ac-Mini-PCIe-Wi-Fi-Module-Dual-Band-2.4GHz-5GHz.htmlcontact:​​[email protected] max 24dBm & 5GHz max 23dBm o..._dr600vx网卡

快速学会创建uni-app项目并了解pages.json文件_uni中的page-程序员宅基地

文章浏览阅读3.2k次,点赞103次,收藏96次。学习目标:1.学会创建uni-app项目 2.了解uni-app中pages.josn文件的作用_uni中的page

【js】JavaScript手动回收垃圾_js手动触发gc-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏5次。如何手动触发 JavaScript 垃圾回收行为?垃圾回收,即 garbage collect,简称 “GC”。这里的 “手动” 指有效地、显式地、可控地触发浏览器 JavaScript 引擎的垃圾回收行为,比如通过点击页面中的按钮来调用 JS 方法,或使用浏览器提供的功能。IEIE 实际上提供了一个未公开的 JS 方法 CollectGarbage()。至少在 I_js手动触发gc

随便推点

回炉夜话 - 序-程序员宅基地

文章浏览阅读159次。有志足风流,惜诺自可亲 这是我大学时代信奉的格言。转眼年至不惑,回想人生倒也是感慨万千。 在这里,作为一个老码农,我想梳理下自己的技术栈。为继续做一个码农而努力。 一、首先,对于各种技术的掌握程度作出如下定义: 了解: 阅读过相关资料或书籍,有可能..._回炉夜话全集

Android问题解决--“signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xxxxxxx” 又出现了_to unreadable libraries. for unwinds of apps, only-程序员宅基地

文章浏览阅读1.2w次。今天,调试一个app,又出现“signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0xxxxxx”问题了。而且只在Android10以上版本才会有,导致的现象是app崩溃,这怎么怎?问题log:signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x739ae8d004全部log如下:05-08 10:21:31.065 D/a.module(1890.._to unreadable libraries. for unwinds of apps, only shared libraries

工件SSMwar exploded 部署工件时出错。请参阅服务器日志了解详细信息_正在构建工件 'ssm0950my8t:war exploded': 正在复制文件…-程序员宅基地

文章浏览阅读1.9k次。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。由于监听器过早的生效时间导致我们自动注入的bean的引用名称还没有生效(实际上bean已经注入了,但是监听器此时识别不到,小写类名首字母也没有用),这时候就要用到自定义bean名称了!仔细想一下,查看我监听器的代码,监听器实现了ServletContextListener接口,是一个全局监听器,也就是项目刚启动是就会生效,于是我添加了一条输出信息,就是“进入监听器”..._正在构建工件 'ssm0950my8t:war exploded': 正在复制文件…

字符串(python)_首先创建一个字符串str为“a little girl”,提取第3到13个字符,并组成新的字符串b-程序员宅基地

文章浏览阅读217次,点赞2次,收藏2次。(2)请统计字符串出现的每个字母的出现次数(忽略大小写,a 与 A 是同一个字母),并输出成一个字典。‘aAsmr3idd4bgs7Dlsf9eAF’,经过去除后,输出 ‘asmr3id4bg7lf9e’(4)按字符串中字符出现频率从高到低输出到列表,如果次数相同则按字母顺序排列。(3)请去除字符串多次出现的字母,仅留最先出现的一个,大小写不敏感。(1)请将字符串的数字取出,并输出成一个新的字符串。_首先创建一个字符串str为“a little girl”,提取第3到13个字符,并组成新的字符串b

JVisualVM 手动生成 Java Core Dump_手动生成coredump-程序员宅基地

文章浏览阅读2k次。最近在研究 Java Core Dump 查看及使用问题,这里我采了JDK自带工具jvisualvm ,这个工具可协助生成 Java Core Dump 文件1, Java Core Dump 文件是什么Java Core Dump 文件呢,是针对 JVM 虚拟机发生致命问题或者 JVM 中运行的程序造成致命问题时,所产生的记录文件,通常会存在2个文件1.1,Java Cor..._手动生成coredump

谈谈开源技术选型_开源技术 选型-程序员宅基地

文章浏览阅读4.7k次。有时感觉技术选型就像个伪命题,胜出的技术占据绝对的主流,就像 java 领域中 ejb 被 ssh/ssi 框架取代。 大部分项目使用近似的模式搭建,选型在工程中变得似乎可有可无。 时间上胜出的开源技术帮助开发者在客观上做出了选择,我们先了解下影响选型的客观因素。客观因素客观因素包括如下:1. 广泛性我们都倾向于选择更广泛应用的开源技术以规避未知性风险。2. 质量质量我们会_开源技术 选型

推荐文章

热门文章

相关标签