题目大意:给n(n<=50)个向量(xi,yi) (0<=xi<=yi<=50),选出其中k(1<=k<=n)个,从(0,0)点开始,依次首尾相连,求此k个向量与x正半轴围成的最大面积的两倍并输出。

初步想法,向量都在第一象限,所以最优解一定是选中k个排成上凸曲线。故第一步是按照向量斜率排序!

然后就是迭代dp了。

先看看暴力方程dp[i][j][y]=max(dp[i][j][y],dp[o][j-1][y-li[i].y]+f(li[i].x,li[i].y,y)) (对于任意的i>o>=j)这个时候需要枚举o,效率是很不乐观的。

优化:假设dp[i][*][*]都已经求出来了。

那么dp[i+1][j][y]=max(dp[i][j][y],dp[i][j-1][y-li[i+1].y]+f(li[i+1].x,li[i+1].y,y)),这样i推出i+1就是O(1)的效率了,初始状态就是dp[x][0][0]=0。

再加上一点剪枝,这样就是很好的solution了。

再看看样例,有T<=110个case,所以不能每次循环都memset(dp,0,sizeof(dp))一遍,加访问标记。(建议ACMer新手每次一定要记得看看样例有多少组)

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int dp[][][];
int stamps[][][];
struct line{
int x,y;
friend bool operator<(line S,line T){
return S.y*T.x > T.y*S.x;
}
}li[];
int main()
{
int cases; cin>>cases;
int n,k;
for(int cas=;cas<=cases;cas++){
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)
scanf("%d%d",&li[i].x,&li[i].y);
for(int i=;i<=n;i++)
dp[i][][]=,stamps[i][][]=cas;
sort(li+,li+n+);
int t;
for(int i=;i<=n;i++){
int maxj=min(i,k),minj=max(,k-(n-i+));
for(int j=minj;j<=maxj;j++){
for(int y=;y>=;y--){
dp[i][j][y]=;
if(i>j && stamps[i-][j][y]>=cas) dp[i][j][y]=dp[i-][j][y], stamps[i][j][y]=cas;
if((y-li[i].y)>= && stamps[i-][j-][y-li[i].y]>=cas)
dp[i][j][y] = max(dp[i][j][y],dp[i-][j-][y-li[i].y]+(y+y-li[i].y)*li[i].x), stamps[i][j][y]=cas;
}
}
}
int ans=;
for(int y=;y>=;y--)
if(stamps[n][k][y]>=cas) ans=max(ans,dp[n][k][y]);
printf("Case %d: %d\n",cas,ans);
}
return ;
}

uva12589的更多相关文章

随机推荐

  1. Hortonworks HDP Sandbox定制(配置)开机启动服务(组件)

    定制Hortonworks HDP开机启动服务能够这样做:本文原文出处: http://blog.csdn.net/bluishglc/article/details/42109253 严禁不论什么形 ...

  2. HTML5新特性学习-1

    本文在于巩固基础 新特性:音频的使用 <!DOCTYPE html> <html> <head lang="en"> <meta char ...

  3. 常见Web Service 使用网址

    下面的网址是常用Web Service http://www.webxml.com.cn/zh_cn/web_services.aspx 里面的很多Web Service接口...可以用到的,很有用!

  4. css3文本效果

    CSS3 包含多个新的文本特性. 在本章中,您将学到如下文本属性: 1. text-shadow 2. word-wrap 浏览器支持 Internet Explorer 10.Firefox.Chr ...

  5. 使用XmlReader读取xml文件之二

    在.net开发中经常需要读写xml形式的文件(app.config和web.config分别是WinForm和WebForm中使用到的 xml文件的一个特列,并且微软提供了通用的方法,在此就不赘述了) ...

  6. UVA 529 - Addition Chains,迭代加深搜索+剪枝

    Description An addition chain for n is an integer sequence  with the following four properties: a0 = ...

  7. Python入门之中文乱码

    python入门编码: Python 文件中如果未指定编码,有中文代码时候,在执行过程会出现报错: File "test.py", line 2 SyntaxError: Non- ...

  8. 学习笔记-menusript控件中条目权限设置使用

    在做一个小程序的时候,偶然发现了使用menusript控件做权限设置的方法,仅此标记,以供参考. 首先创建一个实例:testuseright.sln, 在项目文件里创建两个窗体:Form1.cs和us ...

  9. jquery.validate的效验方式

    jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 原文地址:http://www.cnblogs.c ...

  10. 实现水电气一卡通 IC卡扇区分配

    现在市面上我们接触到的IC卡大部分都是分为16个扇区,分别标注为0-15区.而实现一卡通的秘密就在这16个扇区之中,一个,或者一类功能用途读取这一个扇区,除了一般默认0扇区不用外,其他扇区可以被分别加 ...