BZOJ 1933 [Shoi2007]Bookcase 书柜的尺寸 ——动态规划
2024-08-26 23:36:54
状态设计的方法很巧妙,六个值 h1,h2,h3,t1,t2,t3,我们发现t1,t2,t3可以通过前缀和优化掉一维。
然后考虑把h留下还是t留下,如果留下h显然t是会发生改变的,一个int存不下。
如果按照h降序排序,然后计算的时候存总的高度值,就很方便转移了。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define inf 0x3f3f3f3f int dp[2][2105][2105],n,sumt,prst[80];
struct Book{int h,t;}a[80];
bool cmp(Book x,Book y)
{return x.h>y.h;}
int main()
{
int now=1,pre=0;
memset(dp[now],0x3f,sizeof dp[now]);
dp[now][0][0]=0;
scanf("%d",&n);
F(i,1,n) scanf("%d%d",&a[i].h,&a[i].t),sumt+=a[i].t;
sort(a+1,a+n+1,cmp);
F(i,1,n) prst[i]=prst[i-1]+a[i].t;
F(i,0,n-1)
{
now^=1;pre^=1;
memset(dp[now],0x3f,sizeof dp[now]);
F(j,0,sumt) F(k,0,sumt) if (dp[pre][j][k]!=inf)
{
if (j!=0)
dp[now][j+a[i+1].t][k]=min(dp[now][j+a[i+1].t][k],dp[pre][j][k]);
else
dp[now][j+a[i+1].t][k]=min(dp[now][j+a[i+1].t][k],dp[pre][j][k]+a[i+1].h);
if (k!=0)
dp[now][j][k+a[i+1].t]=min(dp[now][j][k+a[i+1].t],dp[pre][j][k]);
else
dp[now][j][k+a[i+1].t]=min(dp[now][j][k+a[i+1].t],dp[pre][j][k]+a[i+1].h);
if (prst[i]-j-k!=0)
dp[now][j][k]=min(dp[now][j][k],dp[pre][j][k]);
else
dp[now][j][k]=min(dp[now][j][k],dp[pre][j][k]+a[i+1].h);
}
}
int ans=inf;
F(i,0,sumt) F(j,0,sumt)
if (dp[now][i][j]!=inf)
if (i*j*(prst[n]-i-j)!=0)
{
ans=min(ans,max(i,max(j,prst[n]-i-j))*dp[now][i][j]);
}
printf("%d\n",ans);
}
最新文章
- 李洪强iOS经典面试题141-报错警告调试
- 对";QQGame-大家来找茬";的辅助工具的改进
- Hibernate 应用
- Mathematics:Dead Fraction(POJ 1930)
- UCOS 解读代码
- HDfs命令
- ajax往后台传json格式数据报415错误
- ASP.NET小知识
- Android HTTPS(3) IOException: Hostname 解决方案
- xcode4的环境变量,Build Settings参数,workspace及联编设置
- java_jdbc_batch处理_主键id获取
- Android主题换肤 无缝切换
- Codeforces Round #258 (Div. 2) 小结
- Android 开发笔记___存储方式__共享参数__sharedprefences
- win10利用自带的IIS搭建ftp遇到瓶颈,离线求解!!!
- python定时执行任务的三种方式
- pymongo 使用方法(增删改查)
- 动态令牌验证遇到的问题(判断用户长按backspace键)
- [android] 开启新的activity获取他的返回值
- git关于文件权限修改引起的冲突及忽略文件权限的办法
热门文章
- COGS 1144. [尼伯龙根之歌] 精灵魔法
- ping 不通。无法访问目标主机
- 【iview input 回车刷页面bug】input 就一个的时候 有form的时候 回车会刷页面,如果就一个input,可以不要form,或者form里面两个input 将一个input v-show false 就可以了
- layui 数据table隐藏表头
- java实现中文或其他语言及标点符号等转换成unicode字符串,或unicode的16进制码转换回文字或符号等
- Android Studio 中安装 apk 被拆分成多个 slice,如何禁止?
- Java中的线程--Lock和Condition实现线程同步通信
- TCP头校验和计算算法详解
- mongodb详细教程
- linux中复制文件夹的所有文件到指定目录