TOJ4101.Guess Game(TOJ means Tianjin University Online Judge)(dp的思想,但这道题目是假dp)
题意:你要从[1,n]这个n个数中猜出来规定的某个数,现在这个数未知,问你在最糟糕的情况下(但是你采用了最优的策略),你要猜多少次才能猜出这个数。现在有两种条件:
第一种:当你猜的数比指定的那个数小的时候,系统会提示你small;
第二种:当你猜的数比指定的那个数大的时候,系统会提示你wrong,但是从这以后不论你猜的数比指定数大或小,系统将永远提示你wrong。
在这里最糟糕情况可以理解为这个人很倒霉,命运总是让他多猜。
分析:
数列:1,2,3,4,....,k,....,n
比如说你猜了数字k,那么现在有两种情况:
α.你猜的数字比指定的数字大了,由于你很倒霉,所以你得一个个地往小里猜,此时最糟糕的情况是指定数字是1,那么你要猜k - 1次;
β.你猜的数字比指定的数字小了,那么相当于又开始了一个规模为n-k的游戏;
现在定义dp[i]---->在最糟糕的情况下,从规模为i的数列中猜数,最少要猜多少次。
那么我们应该怎么制定自己的策略呢?由于你很倒霉,那么命运一定会让你进入两种情况中多的那一种。那么好,我就让两种情况要猜的数尽量相等,这样就是最优的策略。
dp[i] = min{max(k-1,dp[i-k])+1;
memset(dp,F,sizeof(dp));
dp[] = ,dp[] = ,dp[] = ,dp[] = ;
for(int i = ;i <= ;++i){
for(int j = ;j <= i;++j){
dp[i] = min(dp[i],max(dp[i - j],j - ) + );
}
}
然而n<= 109,这样的时间复杂度是O(n2),空间复杂度是O(n)。
即爆时间又爆空间。
这就是为啥说这是个假dp了,然而让人惊喜的是,这道题目的得数有规律:
从1到n对应的得数分别是:1个1,2个2,3个3,4个4......
那这个就相当于解一个不等式了,(X2+X)/2 ≥ n,由于在定义域上单调,这里用二分搜索即可:
AC代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
//#define LOCAL
using namespace std;
int calculate(int x)
{
return (x * x + x)>>;
}
int main()
{
//#ifdef LOCAL
//freopen("TOJ4101.txt","r",stdin);
//freopen("TOJ4101out.txt","w",stdout);
//#endif
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
int rht = ,lft = ,mid = (lft + rht)>>,temp;
while(rht != lft){
temp = calculate(mid);
if(temp < n) lft = mid + ;
else if(temp == n){
lft = mid;
break;
}
else if(temp > n){
rht = mid;
}
mid = (lft + rht)>>;
//printf("left is %d and right is %d\n",lft,rht);
}
printf("%d\n",lft);
}
return ;
}
TOJ4101.Guess Game(TOJ means Tianjin University Online Judge)(dp的思想,但这道题目是假dp)的更多相关文章
- HDU-1003 Max Sum(动态规划,最长字段和问题)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- leetcode array解题思路
Array *532. K-diff Pairs in an Array 方案一:暴力搜索, N平方的时间复杂度,空间复杂度N 数组长度为10000,使用O(N平方)的解法担心TLE,不建议使用,尽管 ...
- {ICIP2014}{收录论文列表}
This article come from HEREARS-L1: Learning Tuesday 10:30–12:30; Oral Session; Room: Leonard de Vinc ...
- 基于Java的支持可变QPS的http负载生成器,提供交互界面和RMI接口
Load generator The load generator is a Java maven project which is implemented using httpclient+thre ...
- POJ 2342 Anniversary party(树形dp)
Anniversary party Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7230 Accepted: 4162 ...
- fake gucci outlet perform a couple associated with things in great trust
Based on my a lot of years of encounter within Taobao, purchase bags must go to the high reputation ...
- a* products
Experience of black-box testing on set-top-boxes/IP-connected devices, games consoles and tablets ht ...
- HDOJ 1520 Anniversary party
树形DP....在树上做DP....不应该是猴子干的事吗? Anniversary party Time Limit: 2000/1000 MS (Java/Others) Memory Li ...
- 2014牡丹江D Domination
Domination Time Limit: 8 Seconds Memory Limit: 131072 KB Special Judge Edward is the headm ...
随机推荐
- cssreset
/** * http://cssreset.com */html, body, div, span, applet, object, iframe,h1, h2, h3, h4, h5, h6, p, ...
- JS为网页添加文字水印【原创】
最近需要实现为网页添加水印的功能,由于水印的信息是动态生成的,而百度谷歌上的方法往往都是为网页添加图片水印或为图片添加水印,而为网页添加文字水印相关资料较少,于是就自己动手写了这个代码. 通常加动态水 ...
- html静态页面实现微信分享思路
微信分享网页的时候,希望分享出来的链接是标题+描述+缩略图,微信开发代码示例里已提供了方法,但只适用于动态页面.由于dedecms是生成了静态文件,其实我想使用ajax获取jssdk参数也能也能实现微 ...
- 使用JS控制伪元素的几种方法
一. 缘由: 本文源于在OSC社区中,有人提问如何用jq获取伪元素.我第一想法是强大的CSS Query应该可以获取伪元素吧. 然而事实上,CSS Query并不能.即我们不能通过$(":b ...
- 战斗逻辑 - demo
创建战斗依赖的数据结构 /** * 角色属性 */ var a_data = { _id: 101, attr: { // 角色战斗属性 }, skill: [],// 技能数组 isAtk: fal ...
- html5表单元素详解
表单是Html中获取用户输入的手段.此文对表单的元素进行了详细整理. 表单基本元素 form input button form元素 html4中,form元素相当于表单的外包装,其他都要在里面.ht ...
- 《C++之那些年踩过的坑(附录一)》
C++之那些年踩过的坑(附录一) 作者:刘俊延(Alinshans) 本系列文章针对我在写C++代码的过程中,尤其是做自己的项目时,踩过的各种坑.以此作为给自己的警惕. [版权声明]转载请注明原文来自 ...
- python练习_12
题目:敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好城市」.(11 ...
- [ext4]01 磁盘布局 - block分析
ext4文件系统最基本的分配单元是"block"(块). block是由一组连续的sectors来组成,其大小介于1k~4K之间,当然不可能是任意值,只能是2的整数次幂个secto ...
- 初窥GPFS文件系统
作者:姜江 linuxemacs@gmail.com 原文地址:http://blog.csdn.net/jznsmail/article/details/5502840?reload 本作品采用知识 ...