T了两发,DP方程很简单粗暴

dp[i][j][k]:用前i物品使得容量分别为j和k的背包恰好装满

背包的调用只需一次即可,第一次T就是每次check都丧心病狂地背包一次

对于sum的枚举,其实i j枚举到sum/2就可以了

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define scan(a) scanf("%d",&a)
#define rep(i,j,k) for(int i = j; i <= k; i++)
using namespace std;
const int maxn = 1666; bool F[maxn][maxn];
int len[maxn],n;
double query(double a,double b,double c){
double p=(a+b+c)/2.0;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
bool dp[2][maxn][maxn];
int C[maxn],W[maxn],V1,V2;
bool bag(int a,int b){
V1=a,V2=b;
rep(i,1,n){
dp[i&1][0][0]=1;
rep(j,0,V1){
rep(k,0,V2){
dp[i&1][j][k]|=dp[i-1&1][j][k];//not be used
if(len[i]<=j) dp[i&1][j][k]|=dp[i-1&1][j-len[i]][k];
if(len[i]<=k) dp[i&1][j][k]|=dp[i-1&1][j][k-len[i]];
}
}
}
return dp[n&1][V1][V2];
} #define check(i,j) dp[n&1][i][j]
int main(){
while(scan(n)!=EOF){
int sum = 0;
rep(i,1,n) scan(len[i]);
rep(i,1,n) sum+=len[i];
memset(F,0,sizeof F);
double t=(double)sum/2;
int tt=sum/2+1;
int maxi=0,maxj=0;
rep(i,1,tt){
rep(j,1,tt){
if(i+j>t){
F[i][j]=1;
maxi=i,maxj=j;
} }
}
double ans=0;
bag(maxi,maxj);
rep(i,1,tt){
rep(j,1,tt){
int k = sum-i-j;
if(F[i][j]&&k>=1&&i+j>k&&i+k>j&&j+k>i&&check(i,j)){
ans = max(ans,query(i,j,k));
}
}
}
long long aans= ans*100;
printf("%lld\n",aans>0?aans:-1);
}
return 0;
}

POJ - 1948 二维01背包的更多相关文章

  1. poj 1948二维01背包

    题意:给出不多于40个小棍的长度,求出用所有小棍组成的三角形的最大面积. 思路:三角形3边求面积,海伦公式:p=(a+b+c)/2;S=p*(p-a)*(p-b)*(p-c);因为最大周长为1600  ...

  2. hdu3496 二维01背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3496 //刚看题目以为是简单的二维01背包,but,,有WA点.. 思路:题中说,只能买M ...

  3. hdu 2126 Buy the souvenirs 二维01背包方案总数

    Buy the souvenirs Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. Leetcode_474. 一和零(二维01背包)

    每个字符串看成一个物品,两个属性是0和1的个数,转换为01背包. code class Solution { public: int w[605][2]; int dp[105][105]; int ...

  5. POJ 1948 Triangular Pastures【二维01背包】

    题意:给出n条边,用这n条边构成一个三角形,求三角形的最大面积. 先求面积,用海伦公式,s=sqrt(p*(p-a)*(p-b)*(p-c)),其中a,b,c分别为三角形的三条边,p为三角形的半周长, ...

  6. poj3260 平衡问题(二维01背包)

    http://www.cnblogs.com/ziyi--caolu/p/3228090.html http://blog.csdn.net/lyy289065406/article/details/ ...

  7. Triangular Pastures (二维01背包)

    描述Like everyone, cows enjoy variety. Their current fancy is new shapes for pastures. The old rectang ...

  8. HDU--2126 Buy the souvenirs(二维01背包)

    题目http://acm.hdu.edu.cn/showproblem.php?pid=2126 分析:有两个要求,一是计算最多可以选多少中纪念品:而是计算选最多纪念品的方案有多少种, 即统计最优方案 ...

  9. HDU-2159FATE(二维完全背包)

    FATE Problem Description 最 近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完 ...

随机推荐

  1. 嵌入式Qt开发环境的搭建详解

    一.嵌入式Qt开发环境的搭建前奏 1.下载arm-linux-gcc-4.4.3-20100728.tar.gz 2.下载qt-everywhere-opensource-src-4.8.5.tar. ...

  2. Linux 上安装Gearman及其PHP扩展

    安装Gearman服务端 # yum install -y uuid-devel libuuid libuuid-devel uuid boost-devel libevent libevent-de ...

  3. Robot Framework - 常用断言讲解

    RobotFramework带有丰富的系统关键,使用时无需导入,直接使用,为写自动化用例带来了极大的方便:不能停留在知道或者是会得程度,只有熟练使用各关键字,才能提升自动化用例的写作效率. 下面将逐个 ...

  4. 命令(Command)模式

    命令(Command)模式:命令模式是对命令的封装.命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象 /* * 客户(Client)角色:创建了一个具体命令(ConcreteComma ...

  5. aspx 与 ashx cs

    1. aspx 与 ashx 我们知道 aspx :继承自 System.Web.UI.Page 然而Page:IHttpHandler public class Page : TemplateCon ...

  6. arcconf工具相关命令V1.0

    arcconf工具相关命令V1.0 清除当前所有raid配置 Arcconf  delete  1  array  all       #删除所有逻辑盘 Arcconf  uninit  1  all ...

  7. jQuery之方法绑定(事件注册)代码小结

    1.最直接的模式,直接将一个function对象传入方法函数,如下面的click(),好处坏处一看便知 $("#btnComfirmChooseCompany").click(fu ...

  8. C# LINQ(7)

    大部分的LINQ的关键字都说了,最后说一下排序吧. LINQ的是查询的利器. 那么查询就会有排序. 所有LINQ提供了两种简单的排序.倒序和默认排序. 关键字是: orderby ascending ...

  9. Ext中setValue和setRawValue

    Ext.getCmp('modifyStatus').setValue(record.get('status').trim()); Ext.getCmp('modifyStatus').setRawV ...

  10. 跳转iPhone设置页面,绕过审核

    1.问题描述 跳转iPhone设置页面之前都是通过 App-Prefs:root=WIFI 来跳转,但是2018年6月废弃了这个函数,被认为是私有函数,审核会被拒绝. 有心人采用了字符串转码的方式来规 ...