用w[i]表示在A中用了i的时间时在B中最少用多长时间,然后转移就可以了。

  备注:这个边界不好定义,所以可以每次用一个cur来存储最优值,然后对w[i]赋值就可以了。

/**************************************************************
Problem: 1222
User: BLADEVIL
Language: C++
Result: Accepted
Time:2648 ms
Memory:992 kb
****************************************************************/ //By BLADEVIL
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 6010
#define inf (~0U>>2) using namespace std; int n,m;
int a[maxn],b[maxn],c[maxn];
int w[maxn*]; int main() {
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d%d%d",&a[i],&b[i],&c[i]);
for (int i=;i<=n;i++) {
if (!a[i]) a[i]=inf;
if (!b[i]) b[i]=inf;
if (!c[i]) c[i]=inf;
m+=min(a[i],min(b[i],c[i]));
}
for (int i=;i<=n;i++)
for (int j=m;j>=;j--) {
int cur(inf);
if (b[i]!=inf) cur=w[j]+b[i];
if (j>=a[i]) cur=min(cur,w[j-a[i]]);
if (j>=c[i]) cur=min(cur,w[j-c[i]]+c[i]);
w[j]=cur;
}
int ans(inf);
for (int i=;i<=m;i++) ans=min(ans,max(i,w[i]));//printf("%d ",w[i]);
printf("%d\n",ans);
return ;
}

update:又仔细想了想这道题,发现其实是可以不用cur的,我们只需要每次假设当前i这个物品在某个机器上加工了,然后再不断更新就可以了。不知道哪里可能会溢出,所以将inf的值改小就可以了。

/**************************************************************
Problem: 1222
User: BLADEVIL
Language: C++
Result: Accepted
Time:2100 ms
Memory:992 kb
****************************************************************/ //By BLADEVIL
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 6010
#define inf (30010) using namespace std; int n,m;
int a[maxn],b[maxn],c[maxn];
int w[maxn*]; int main() {
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d%d%d",&a[i],&b[i],&c[i]);
for (int i=;i<=n;i++) {
if (!a[i]) a[i]=inf;
if (!b[i]) b[i]=inf;
if (!c[i]) c[i]=inf;
m+=min(a[i],min(b[i],c[i]));
}
for (int i=;i<=n;i++)
for (int j=m;j>=;j--) {
w[j]=w[j]+b[i];
if (j>=a[i]) w[j]=min(w[j],w[j-a[i]]);
if (j>=c[i]) w[j]=min(w[j],w[j-c[i]]+c[i]);
}
int ans(inf);
for (int i=;i<=m;i++) ans=min(ans,max(i,w[i]));//printf("%d ",w[i]);
printf("%d\n",ans);
return ;
}

bzoj 1222 DP的更多相关文章

  1. bzoj 3622 DP + 容斥

    LINK 题意:给出n,k,有a,b两种值,a和b间互相配对,求$a>b$的配对组数-b>a的配对组数恰好等于k的情况有多少种. 思路:粗看会想这是道容斥组合题,但关键在于如何得到每个a[ ...

  2. bzoj 1222: [HNOI2001]产品加工 dp

    1222: [HNOI2001]产品加工 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 381  Solved: 218[Submit][Status ...

  3. BZOJ 1222 产品加工(DP)

    某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工,所完成任 ...

  4. 【BZOJ 1222】 [HNOI2001] 产品加工(DP)

    Description 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机 ...

  5. Bzoj 1222: [HNOI2001]产品加工 动态规划

    1222: [HNOI2001]产品加工 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 486  Solved: 298[Submit][Status ...

  6. BZOJ - 1003 DP+最短路

    这道题被马老板毒瘤了一下,TLE到怀疑人生 //然而BZOJ上妥妥地过了(5500ms+ -> 400ms+) 要么SPFA太玄学要么是初始化block被卡到O(n^4) 不管了,不改了 另外D ...

  7. BZOJ 2431 & DP

    题意:求逆序对数量为k的长度为n的排列的个数 SOL: 显然我们可以对最后一位数字进行讨论,判断其已经产生多少逆序对数量,然后对于前n-1位同样考虑---->每一个长度的排列我们都可以看做是相同 ...

  8. bzoj 1791 DP

    首先对于一棵树我们可以tree_dp来解决这个问题,那么对于环上每个点为根的树我们可以求出这个树的一端为根的最长链,并且在tree_dp的过程中更新答案.那么我们对于环,从某个点断开,破环为链,然后再 ...

  9. bzoj 1592 dp

    就是dp啊 f[i][j]表示到第i位,最后一位高度是j的最小花费 转移::f[i][j]=minn(f[i-1][k])+abs(a[i]-num[j]);(k<=j) #include< ...

随机推荐

  1. UVA 562 Dividing coins --01背包的变形

    01背包的变形. 先算出硬币面值的总和,然后此题变成求背包容量为V=sum/2时,能装的最多的硬币,然后将剩余的面值和它相减取一个绝对值就是最小的差值. 代码: #include <iostre ...

  2. table标签去除默认边框

    table去除默认边框 1.在没有出去默认边框时,改变底部颜色,依然显示1px左右的白色边框 2.为table 加上 border="0" cellpadding="0& ...

  3. C语言 日常小结

    1.当数组当作函数参数的时候会退化为指针 #include<stdio.h> #include<stdlib.h> void sort(int a[]){ int num = ...

  4. C语言 百炼成钢9

    //题目25:求1+2!+3!+...+20!的和 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib ...

  5. IBatis.net动态SQL语句

    在学习动态SQL语句之前,首先必须对条件查询有一定了解,先来学习如何向IBatis.Net的映射文件里传入参数. 一.条件查询 1.传递单个参数 如根据Id查询: <select id=&quo ...

  6. UI设计师零基础入门到精通精品视频教程【155课高清完整版】

    [福吧资源网分享]课程是非常完整的,也是非常零基础的,适合任何学员,有需要的可以下载看看!课程目录:第1章 Adobe Photoshop CS6课时1 Adobe Photoshop CS6入门基础 ...

  7. caffe windows 学习第一步:编译和安装(vs2012+win 64)

    没有GPU,没有linux, 只好装caffe的windows版本了. 我的系统是win10(64位),vs 2012版本,其它什么都没有装,因此会需要一切的依赖库. 其实操作系统只要是64位就行了, ...

  8. Java系列:关于Java中的桥接方法

    这两天在看<Java核心技术 卷1>的泛型相关章节,其中说到了在泛型子类中override父类的泛型方法时,编译器会自动生成一个桥接方法,这块有点看不明白. 书上的例子代码如下: publ ...

  9. iOS开发系列--扩展--播放音乐库中的音乐

    众所周知音乐是iOS的重要组成播放,无论是iPod.iTouch.iPhone还是iPad都可以在iTunes购买音乐或添加本地音乐到音乐 库中同步到你的iOS设备.在MediaPlayer.fram ...

  10. vs2015发现一个字符串拼接 bug

    VS2015支持 字符串拼接 如下: string user="test"; int password=123; string sql=$" user={user};pa ...