POJ 1390 Blocks(DP)

Blocks Time Limit:5000MS    Memory Limit:65536KB    64bit IO Format:%lld & %llu

Description

Some of you may have played a game called 'Blocks'. There are n blocks in a row, each box has a color. Here is an example: Gold, Silver, Silver, Silver, Silver, Bronze, Bronze, Bronze, Gold.
The corresponding picture will be as shown below:

Figure 1

If some adjacent boxes are all of the same color, and both the box to its left(if it exists) and its right(if it exists) are of some other color, we call it a 'box segment'. There are 4 box segments. That is: gold, silver, bronze, gold. There are 1, 4, 3, 1 box(es) in the segments respectively.

Every time, you can click a box, then the whole segment containing that box DISAPPEARS. If that segment is composed of k boxes, you will get k*k points. for example, if you click on a silver box, the silver segment disappears, you got 4*4=16 points.

Now let's look at the picture below:

Figure 2


The first one is OPTIMAL.

Find the highest score you can get, given an initial state of this game.

Input

The first line contains the number of tests t(1<=t<=15). Each case contains two lines. The first line contains an integer n(1<=n<=200), the number of boxes. The second line contains n integers, representing the colors of each box. The integers are in the range 1~n.

Output

For each test case, print the case number and the highest possible score.

Sample Input

2
9
1 2 2 2 2 3 3 3 1
1
1

Sample Output

Case 1: 29
Case 2: 1


问题分析:

求click_box(i,j,ex_len)时,有两种处理方法,取最优者
假设j和ex_len合并后的大块称作Q1)

将Q直接消除,这种做法能得到的最高分就是:click_box(i,j-1,0) + (len[j]+ex_len)*(len[j]+ex_len)

期待Q以后能和左边的某个同色大块合并。需要枚举可能和Q合并的大块。假设让大块k和Q合并,则此时能得到的最大
分数是:click_box(i,k,len[j]+ex_len) + click_box(k+1,j-1,0)

还有不清楚可以看下这个视频,特别详细blog.sina.com.cn/u/3266490431

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=210;
int dp[maxn][maxn][maxn];
int t,n,cas=0;
int color[maxn],len[maxn],block[maxn];
int solve(int l,int r,int k)
{
    if(dp[l][r][k]) return dp[l][r][k];
    if(l==r)
        return dp[l][r][k]=(len[r]+k)*(len[r]+k);
    // 直接消除
    //cout << solve_dp(l, r-1, 0) + (k+len[r])*(k+len[r]) << endl;
    dp[l][r][k]=solve(l,r-1,0)+(len[r]+k)*(len[r]+k);
    // 先消除中间的, 合并 color[r], 在消除颜色为 r 的
    for(int i=l;i<r;i++){
        if(color[i]==color[r])
            dp[l][r][k]=max(dp[l][r][k],solve(l,i,k+len[r])+solve(i+1,r-1,0));
    }
    return dp[l][r][k];
}
int main()
{
    scanf("%d",&t);
    while(t--){
        int i,ans=0;
        memset(len,0,sizeof(len));
        memset(dp,0,sizeof(dp));
        for(scanf("%d",&n),i=0;i<n;i++) scanf("%d",&block[i]);
        color[0]=block[0],len[0]=1;
        for(int i=1;i<n;i++){
            if(block[i]==block[i-1]) len[ans]++;
            else{
                color[++ans]=block[i];
                len[ans]++;
            }
        }
        int sum=solve(0,ans,0);
        printf("Case %d: %d\n",++cas,sum);
    }
    return 0;
}

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java教学信息化管理系统是一款基于Java技术开发的教学信息化管理软件,主要用于高校或教育机构的教学管理、教学资源的整合、教学评价的分析等功能。这款系统具备了多种功能模块,主要包括教师管理、学生管理、课程管理、考试管理、教学资源管理等模块。 在教师管理模块中,系统可以实现包括教师信息录入、修改、删除、查询、教师用书、教师简历、教师考评等管理功能。在学生管理模块中,系统可以实现包括学生信息录入、修改、删除、查询、学生考评等管理功能。在课程管理模块中,系统可以实现包括课程录入、修改、删除、查询、课程评价等管理功能。在考试管理模块中,系统可以实现包括试卷导入、查询、评分等功能。在教学资源管理模块中,系统可以实现包括教学视频、教学文档、教学软件、教学PPT等教学资源的管理功能。 Java教学信息化管理系统具有很多优点。首先,它基于Java技术,具有良好的可移植性和扩展性。其次,系统设计合理,界面美观直观,用户易于操作。再者,系统可以实现多种功能模块,满足不同用户的需求。最后,系统能够帮助学校或教育机构实现信息化管理,提高了教学质量和效率。 总之,Java教学信息化管理系统是一款非常值得推荐的教学信息化管理软件,可以帮助学校或教育机构实现信息化管理,提高教学质量和效率。 ### 回答2: Java教学信息化管理系统是一种用于管理学校教学信息的系统,它可以帮助学校更好地管理教育资源,提高教学质量。下面是这种系统的设计与实现。 首先,该系统应该具备以下模块:学生管理,教师管理,课程管理,课程表管理,成绩管理,考勤管理等。在学生模块中,可以通过学号,姓名等关键字查询到学生的详细信息;在教师模块中,可以查询教师信息,管理教师的授课信息;在课程模块中,可以管理学校所有的课程信息;在课程表模块中,可以查看学生和教师的课表,课程时间等信息;在成绩模块中,可以进行成绩的录入、统计和分析;在考勤模块中,可以查看学生的考勤情况,对学生的缺勤情况进行管理。 其次,该系统应该基于Java编程语言进行开发。使用SpringMVC作为系统的框架,采用Mybatis作为持久层框架,在界面设计方面,采用Bootstrap作为开发工具。使用这些工具能够更好地实现系统的功能,提高用户的使用体验。 最后,在系统实现的过程中要注意系统的性能和安全问题。建立一个健全的安全机制,设置各种安全策略和限制条件,保证所有数据的安全性和可靠性。同时还要不断对系统的进行优化和加速,从而提高系统的执行效率。 综上所述,Java教学信息化管理系统是一个多模块、综合性的系统,可以帮助学校更好地管理教育资源,提高教学质量,其设计和实现都需要充分考虑到各种实际情况。 ### 回答3: Java教学信息化管理系统是一款集教学管理、教学资源管理、教学评估、学生信息管理于一体的教育管理系统。该系统设计以Java语言为主要开发语言,采用MVC模式设计和SpringBoot框架,实现了控制反转、依赖注入等技术,以确保系统的高效性和可重用性。 本教学信息化管理系统主要由五个模块构成:用户管理、课程管理、教学资源管理、学生成绩管理、角色权限管理。在用户管理模块中,用户可以进行注册、登录、修改信息等操作;在课程管理模块中,教务人员可以进行课程发布和更新等操作;在教学资源管理模块中,教师可以将教学资源进行上传、删除、修改等操作;学生成绩管理模块中,教务人员可以进行成绩登记、查询等操作;角色权限管理模块中,超级管理员可以管理系统的角色权限和菜单权限等操作。 在该系统的实现过程中,还引用了很多其他技术,如Mybatis用于DAO层操作数据库,Thymeleaf用于页面渲染,Spring Security用于安全管理,Bootstrap 4用于页面布局等。 总之,Java教学信息化管理系统有很多优点,如应用广泛、开发速度快、易维护等,它不仅能够满足教育管理的需求,也可以运用到各个领域进行信息化管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值