ZOJ 3211 6th省赛 J Dream City【DP】
来源:互联网 发布:什么理财软件安全可靠 编辑:程序博客网 时间:2024/06/05 09:20
题目链接
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3374
思路
很经典的题,大意是给你n棵摇钱树,你要在m天内连续砍掉m棵,每棵树的初始价值是ai,每日增长bi,问能获得的最大价值是多少。
其实这题就是一个物品价格会变的01背包问题,可以用贪心转换成01背包的求解方式。
贪心策略是:对于任意确定的m棵树,砍树顺序是确定的,即b越大的放越后面砍。
所以把点从大到小排好序,然后把天数当作背包容量,用01背包的方程去DP就行了。
这里还有一点和01背包有点不同的是容量必须恰好用完,所以要把dp[1][j]=-INF,j>1。
AC代码
//zoj3211#include <bits/stdc++.h>using namespace std;const int INF=1<<30;struct node{ int a,b;}tree[300];bool cmp(node x, node y){ return x.b>y.b;}int dp[300][300];void print_dp(int m,int n)//调试用{ printf("_____________________\n"); for(int j=0 ; j<=m ; ++j) { for(int i=1 ; i<=n ; ++i) { if(dp[i][j]<0)printf("-INF "); else printf("%4d ",dp[i][j]); } printf("\n"); } printf("_____________________\n");}int main(){ int T; scanf("%d",&T); while(T--) { memset(dp,0,sizeof dp); int m,n; scanf("%d%d",&n,&m); for(int i=1 ; i<=n ; ++i)scanf("%d",&tree[i].a); for(int i=1 ; i<=n ; ++i)scanf("%d",&tree[i].b); sort(tree+1,tree+1+n,cmp); for(int j=0 ; j<=m ; ++j) { if(j==0)dp[1][j]=0; if(j==1)dp[1][j]=tree[1].a+tree[1].b*(m-1); if(j>1)dp[1][j]=-INF; } //print_dp(m,n); for(int i=2 ; i<=n ; ++i) { for(int j=0 ; j<=m ; ++j) { int a=tree[i].a,b=tree[i].b; dp[i][j]=dp[i-1][j]; if(j>0) dp[i][j]=max(dp[i][j],dp[i-1][j-1]+a+b*(m-j)); } //print_dp(m,n); } printf("%d\n",dp[n][m]); } return 0;}
0 0
- ZOJ 3211 6th省赛 J Dream City【DP】
- ZOJ-3211-Dream City【6th浙江省赛】【dp】
- ZOJ 3211 Dream City(DP)
- ZOJ 3211Dream City(dp)
- ZOJ 3211 Dream City【dp】
- zoj 3211 Dream City(DP)
- ZOJ 3211 Dream City(DP)
- zoj 3211 Dream city dp+贪心
- ZOJ - 3211 Dream City
- zoj 3211 - Dream City
- ZOJ 3211 Dream City
- ZOJ 3211 Dream City
- zoj 3211 Dream City
- zoj 3211 dream city 贪心 dp和记忆化搜索
- ZOJ-3211-Dream City-DP背包问题+贪心
- zoj 3211 Dream City 动态规划
- zoj 3211 Dream City 贪心+动规
- Dream City ZOJ
- CSS padding margin border属性详解
- 二维码扫描ios开发
- const的注意事项
- 支付宝pc即时支付兼容app移动支付异步回调函数验证
- mysql表类型MyISAM和InnoDB区别
- ZOJ 3211 6th省赛 J Dream City【DP】
- Android —JAVA接口回调机制解析
- setOnTouchListener使用记录
- Js中Prototype、__proto__、Constructor、Object、Function关系介绍
- Block全面分析
- 自动化测试之unittest
- EXTJS4.x以上的版本中没有dolayout这个方法
- 人脸识别 iOS开发
- 位运算