Codeforces 294B Shaass and Bookshelf(记忆化搜索)

题目

记忆化搜索(深搜+记录状态)

感谢JLGG

//记忆话搜索
//一本书2中状态,竖着放或者横着放
//初始先都竖着放,然后从左边往右边扫
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[110][210][210];//dp[第几个][厚度][宽度]
int n;
int a[110],b[110];

int rec(int i,int th,int w)
{
    if(dp[i][th][w]!=-1)return dp[i][th][w];
    int res;
    if(i==n)res=th;
    else if(th-a[i]<w+b[i])res=rec(i+1,th,w);//判断合不合法
    else res=min(rec(i+1,th-a[i],w+b[i]),rec(i+1,th,w));
    return dp[i][th][w]=res;
}

int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        int th=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&a[i],&b[i]);
            th+=a[i];
        }
        memset(dp,-1,sizeof(dp));
        int ans=rec(0,th,0);
        printf("%d\n",ans);
    }
    return 0;
}

Codeforces 294B Shaass and Bookshelf(记忆化搜索)

时间: 2024-11-02 14:35:40

Codeforces 294B Shaass and Bookshelf(记忆化搜索)的相关文章

UVA - 10559 Blocks 和 Vasya and Binary String CodeForces - 1107E (dp OR 记忆化搜索)

UVA - 10559 Blocks 题意:消消乐,每次连续相同的可以消除,分数加上长度的平方,问最多可以获得几分全部消完 题解: 区间dp + 记忆化搜索 dp[i][j][k] : (区间 [i,  j] 后面带上一段和 j 颜色相同的且长度为 k )的消消乐最大积分 1.消最后一段颜色和 j 颜色相同的 dp[i][j][k] <-- dp[i][j-1][0] + (k+1)^2 2.对于i <= l < j, 如果 l 和 j 的颜色相同, 那么可以把 [l+1, j-1]消掉

Codeforces 238E. Meeting Her 图论+记忆化搜索

大意: 有一个 n 个结点的有向图,边权均为 1.Urapl 想从 a 出发去 b.有 p 个公交车公司.在每 一秒的开始,第 i 个公司的公交车随机选择一条从 s i 到 t i 的最短路径然后走这条路径.如果 一个公交车经过 Urpal 所在的交叉点,则 Urpal 可以上这辆公交车,他可以在中途任意一个结 点下车. 在任何时刻 Urpal 只知道他自己的位置和约会地点.当他上了公交车时他只知道这辆公交 车属于第几个公司.当然 Urpal 知道城市地图和每个公司的 (s i , t i ).

codeforces 294B Shaass and Bookshelf

题意:给你n本书,你可以把它竖着摆放,然后也可以横着摆在竖着的书上面,但不能超过竖着摆放的边缘,且不可以堆叠.问你竖着摆放的最小宽度是多少. 解题思路:dp,dp[i][j] 代表 第i个 ,用竖着摆放为 j 的书横着摆放的最小值 解题代码: 1 /************************************************************ 2 * Author : darkdream 3 * Email : [email protected] 4 * Last mo

Codeforces 294B Shaass and Bookshelf:dp

题目链接:http://codeforces.com/problemset/problem/294/B 题意: 有n本书,每本书的厚度为t[i],宽度为w[i] (1<=t[i]<=2, 1<=w[i]<=100). 然后让你将所有书按照下面的方式摆放: 在下面放一本书会占用下面t[i]的长度. 在上面放一本书会占用上面w[i]的长度. 最终要保证上面的总长度不超过下面的总长度. 问你下面的总长度最小是多少. 题解: 表示状态: dp[i][j] = min length 表示已经

CodeForces 294B Shaass and Bookshelf 【规律 &amp; 模拟】或【Dp】

这道题目的意思就是排两排书,下面这排只能竖着放,上面这排可以平着放,使得宽度最小 根据题意可以得出一个结论,放上这排书的Width 肯定会遵照从小到大的顺序放上去的 Because the total thickness of vertical books is fixed it's good to calculate the minimum possible total width of horizontal books. 那么只需要模拟一遍放书的过程即可,不会TLE 不过正统解法是Dp Dp

Codeforces Div.301D Bad Luck Island(概率dp+记忆化搜索)

一道概率dp问题. 题目链接:http://codeforces.com/contest/540/problem/D 题目大意:一个岛上有r个石头,s个剪子,p个布,他们之间随机挑出两个相遇,如果不是相同物种,就会有一个消失,分别求出最后这座岛上只剩下一个物种的概率. 我们用dp[i][j][k]来存储i个石头,j个剪刀,k个布时,某物种的存活概率,共dp三次,算出三个物种分别的概率. 首先,我们需要把对应想求的物种概率初始化,这里以石头为例,那么对于i从1到r,不难理解dp[i][0][0]=

Codeforces 509F Progress Monitoring (区间dp 或 记忆化搜索)

F. Progress Monitoring time limit per test 1 second memory limit per test 256 megabytes Programming teacher Dmitry Olegovich is going to propose the following task for one of his tests for students: You are given a tree T with n vertices, specified b

Codeforces 148D Bag of mice:概率dp 记忆化搜索

题目链接:http://codeforces.com/problemset/problem/148/D 题意: 一个袋子中有w只白老鼠,b只黑老鼠. 公主和龙轮流从袋子里随机抓一只老鼠出来,不放回,公主先拿. 公主每次抓一只出来.龙每次在抓一只出来之后,会随机有一只老鼠跳出来(被龙吓的了...). 先抓到白老鼠的人赢.若两人最后都没有抓到白老鼠,则龙赢. 问你公主赢的概率. 题解: 表示状态: dp[i][j] = probability to win(当前公主先手,公主赢的概率) i:剩i只白

Codeforces 39E What Has Dirichlet Got to Do with That? 博弈+记忆化搜索

题目链接:点击打开链接 题意: 给定 a个箱子 b个球 常数n (球和箱子都是各不相同的,不会出现有一样的物品) 设 way = 把b个球放到a个箱子中的方法数, 若way >= n则游戏结束 有2个人玩游戏. 若当前轮到 X时 1. X选择增加一个箱子或增加一个球 2.若增加完后方法数>=n 则X失败 若先手必胜,则输出 Masha ,若先手必败则输出 Stas ,若为平局则输出 Missing 思路: 记忆化搜索 若当前给 a++ 或 b++都是会>=n 则当前局势必败 从其中不会&