POJ - 1948 二维01背包
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背包的更多相关文章
- poj 1948二维01背包
题意:给出不多于40个小棍的长度,求出用所有小棍组成的三角形的最大面积. 思路:三角形3边求面积,海伦公式:p=(a+b+c)/2;S=p*(p-a)*(p-b)*(p-c);因为最大周长为1600 ...
- hdu3496 二维01背包
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3496 //刚看题目以为是简单的二维01背包,but,,有WA点.. 思路:题中说,只能买M ...
- hdu 2126 Buy the souvenirs 二维01背包方案总数
Buy the souvenirs Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- Leetcode_474. 一和零(二维01背包)
每个字符串看成一个物品,两个属性是0和1的个数,转换为01背包. code class Solution { public: int w[605][2]; int dp[105][105]; int ...
- POJ 1948 Triangular Pastures【二维01背包】
题意:给出n条边,用这n条边构成一个三角形,求三角形的最大面积. 先求面积,用海伦公式,s=sqrt(p*(p-a)*(p-b)*(p-c)),其中a,b,c分别为三角形的三条边,p为三角形的半周长, ...
- poj3260 平衡问题(二维01背包)
http://www.cnblogs.com/ziyi--caolu/p/3228090.html http://blog.csdn.net/lyy289065406/article/details/ ...
- Triangular Pastures (二维01背包)
描述Like everyone, cows enjoy variety. Their current fancy is new shapes for pastures. The old rectang ...
- HDU--2126 Buy the souvenirs(二维01背包)
题目http://acm.hdu.edu.cn/showproblem.php?pid=2126 分析:有两个要求,一是计算最多可以选多少中纪念品:而是计算选最多纪念品的方案有多少种, 即统计最优方案 ...
- HDU-2159FATE(二维完全背包)
FATE Problem Description 最 近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完 ...
随机推荐
- 在CenOS7.5里安装Redis
一.系统环境 操作系统:CentOS 7.5 Redis版本:redis3.2.8 登录账号:Frank 二.安装过程 A.预安装,安装gcc 1.进入终端,切换到root账号 2.输入指令: yum ...
- Browser
浏览器中关于事件的那点事儿 作者: 顽Shi 发布时间: 2014-02-01 20:22 阅读: 7830 次 推荐: 25 原文链接 [收藏] 摘要:事件在Web前端领域有很重要 ...
- Swing自定义JScrollPane的滚动条设置,重写BasicScrollBarUI方法
Swing自定义JScrollPane的滚动条设置,重写BasicScrollBarUI方法 摘自:https://blog.csdn.net/qq_31635851/article/details/ ...
- 基于任务的异步编程模式,Task-based Asynchronous Pattern
术语: APM 异步编程模型,Asynchronous Programming Model,其中异步操作由一对 Begin/End 方法(如 FileStream.BeginRea ...
- Deep Residual Learning for Image Recognition
Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun Microsoft Research {kahe, v-xiangz, v-sh ...
- wifi 定位
前一天跟某电信公司一位朋友聊天: 问:电信用户现在能占手机用户多少比例? 答:(??) 问:把cdma给了电信,其实就是给个根鸡肋. 答:呃,看怎么说.对于电信来说,毕竟拿到了移动牌照. 问:工作行不 ...
- Dynamically loading unmanaged OCX in C#
You'll have to perform a number of steps that are normally taken of automatically when you use the t ...
- C#多线程编程实战1.4终止线程
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- 2018数学建模国赛总结(A题/编程选手视角)
2018数学建模已经告一段落了,先说说基本情况吧,我们队伍专业分别为:金融(A),会计(B),计算机(我),配置还算可以,他们俩会数据分析软件也会写论文,我可以写代码,画图.他们俩打过美赛(M奖),我 ...
- javascript按键盘上/右/下/左箭头加速运动
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...