Regionals 2009 Asia - Hsinchu uvalive 4526 Inventory - dp
来源:互联网 发布:redis c语言接口 编辑:程序博客网 时间:2024/06/18 14:20
题目链接:
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=350&page=show_problem&problem=2527
题目大意:
有个工厂要生产一些产品,生产之前先要买一些原材料,但是每天材料的价格不一样,今天买的材料只能今天用或者明天用,每天必须完成每天的任务不能留给下一天,现在要求完成n天的任务的最小花费。
思路:dp
刚开始一直用贪心,wa的简直不成人样。。。现在依然还是觉得贪心可以用,只是大概我的姿势不对。。
dp[i][j] 表示第i天完成任务后还剩余j个材料最小花费,剩余的j个可以留给下一天用。
那么枚举天数i,枚举留给下一天的个数j,再枚举从前一天得到k,
dp[i][j] = min(dp[i][j],dp[i-1][k] + p[i]*(h[i]+j-k));
p[i],表示第i天的价格
h[i],表示第i天需要完成产品数
直接三重循环,tle。。
想一想,主要还是w[i],也就是第i天最多能买的材料数太大,原来是j<=w[i],也就是只考虑传给下一天只受这一天能买的最多的数限制,但其实还有一个条件,就是后一天最多只能接受h[i+1]个,多了就浪费了,所以j<=min(w[i],h[i+1]),这样j的范围就可能会小了很多。
其实一开始准备交的时候,我还是很担忧的,毕竟是1000*100*100按道理是会超时的,但还是过了。。
所以,dp还是要大胆的想,大胆的写,只要状态确定有道理。递推式没问题那就没啥好担心的了。。
代码:
#include <cstdio>#include <algorithm>#include <cstring>using namespace std;#define maxn 1010#define inf 0x3fffffffint p[maxn],w[maxn],h[maxn];int dp[maxn][110];int main(){int T,n;scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d%d",&p[i],&w[i],&h[i]);}memset(dp,0x3f,sizeof(dp));// dp[i][j] 表示第i天完成任务后还剩余j个材料最小花费 dp[1][0] = p[1]*h[1];for(int i=1;i<=w[1]-h[1];i++) {dp[1][i] = dp[1][i-1] + p[1];//printf("i:%d j:%d %d\n",1,i,dp[1][i]);}for(int i=2;i<=n;i++){int t = i==n?0:min(w[i],h[i+1]);for(int j=0;j<=t;j++){for(int k=0;k<=h[i];k++){if(h[i] + j-k <=w[i] && dp[i-1][k]!=inf){dp[i][j] = min(dp[i][j],dp[i-1][k] + p[i]*(h[i]+j-k));}}//printf("i:%d j:%d %d\n",i,j,dp[i][j]);}}printf("%d\n",dp[n][0]);}return 0;}
0 0
- Regionals 2009 Asia - Hsinchu uvalive 4526 Inventory - dp
- Regionals 2009 Asia - Hsinchu UVALIVE, 4525 - Clues 搜索
- Regionals 2009 :: Asia - Hsinchu UVALIVE, 4527 Vaccination Centers - 搜索剪枝
- Regionals 2009 >> Asia - Hsinchu UVALIVE, 4528 Schedule Pairs of Jobs - 搜索回溯
- Regionals 2009 >> Asia - Hsinchu UVALIVE, 4529 A Constrained Queen Game - 搜索剪枝
- UVALive 4260 Fortune Card Game (Regionals 2008 Asia Taipei +DP)
- UVALive 4264 Message(Regionals 2008 :: Asia - Taipei+模拟)
- UVALive Problem 7454 Parentheses——Regionals 2015 :: Asia - Taipei
- Regionals 2015 >> Asia - Tehran >> 7527 - Funfair【贪心】【dp】
- Uvalive 4267 Finding The Heaviest Path (Regionals 2008 Asia Taipei +DFS结点最大权值路径)
- UVALive Problem 7457 Discrete Logarithm Problem——Regionals 2015 :: Asia - Taipei
- UVALive Problem 7456 Least Crucial Node——Regionals 2015 :: Asia - Taipei
- Regionals 2011, Asia - Amritapuri
- Regionals 2011, Asia - Phuket
- Regionals 2010, Asia - Amritapuri
- Regionals 2011, Asia - Daejeon
- Regionals 2011, Asia - Kanpur
- Regionals 2012 :: Asia - Amritapuri
- AC自动机
- iOS 正则表达式判断邮箱、手机号、身份证、昵称、密码、手机型号等
- 2015 Multi-University Training Contest-6 Key Set
- Git Shell命令大全
- POJ2774 字符串HASH
- Regionals 2009 Asia - Hsinchu uvalive 4526 Inventory - dp
- HDU - 1824 Let's go home(2-SAT)
- zookeeper原理
- hdu1702(ACboy needs your help again!) 在杭电又遇坑了
- STL find函数
- cocos2d中缓存相关
- TLV格式说明
- 杭电1517 A Multiplication Game
- STL string