码迷,mamicode.com
首页 > 其他好文 > 详细

LightOJ 1422 区间dp

时间:2015-05-17 13:50:58      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:acm   区间dp   lightoj   

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27130

万圣节来了,Gappu 需要挨个参加 N 个聚会,聚会需要装扮成一些类似于 Superman 一样的角色,Gappu 需要准备足够的衣服,他可以在一件衣服外面套一件一份,如果之后他需要用到穿在里面的衣服就可以脱去外面的衣服,但 Gappu 有洁癖,对于脱去的衣服,他不再想穿了,问你 Gappu 最多需要准备多少件衣服。

对于区间(l, r) <!--第l个聚会到第r个聚会--> 需要准备多少件衣服?

如果第l个聚会的衣服只在第l个聚会使用的话

DP(l, r) = DP(l+1, r) + 1;

如果区间(l+1, r)中存在聚会k和聚会l使用的衣服一样的话,Gappu 课以脱去外面的衣服,即和第l个聚会使用同一件衣服,

DP(l, r) = DP(l+1, k-1) + DP(k, r);

求最小的DP(0, n-1)就可以。


#include <algorithm>
#include <cstring>
#include <string>
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;

ll table[120][120];

int main()
{
    freopen("input.txt","r",stdin);
    int i,j;
    memset(table,0,sizeof(table));

    for (i = 1; i < 65; i++)
        for (j = 1; j < 65; j++)
        {
            table[i][j] = table[i][j-1] + table[i-1][j-1]+1;
        }
    ll n;
    int k;
    while (scanf("%d %llu", &k, &n) == 2 && k > 0)
    {
        if(k>=64)
        {
            k=63;
        }
        i=lower_bound(table[k],table[k]+65,n)-table[k];
        printf((i < 64) ? "%d\n" : "More than 63 trials needed.\n", i);
    }
    return 0;
}


LightOJ 1422 区间dp

标签:acm   区间dp   lightoj   

原文地址:http://blog.csdn.net/xuelanghu407/article/details/45787727

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!