zoj 3211 Dream City 贪心+动规

来源:互联网 发布:linux如何退出root权限 编辑:程序博客网 时间:2024/06/05 09:10

刚开始没有思路,后来发现如果已经知道要砍哪m棵,那么这m棵的最优方案就是先砍b小的(贪心)。

于是把树按b排序后,再动态规划。其实这题可以更难点,就是m可能大于n。虽然后来发现了n>=m...

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int N=260;int dp[N][N];//前i棵砍了j棵的最大struct tree{int a,b;}t[N];int cmp(tree a,tree b){return a.b<b.b;}int main(){int tt,n,m;scanf("%d",&tt);while(tt--){scanf("%d %d",&n,&m);for(int i=0;i<n;i++)scanf("%d",&t[i].a);for(int i=0;i<n;i++)scanf("%d",&t[i].b);sort(t,t+n,cmp);int wait=m-n;if(wait>0)m=n;else wait=0;memset(dp,0,sizeof dp);for(int i=0;i<n;i++){for(int j=0;j<=m;j++){dp[i+1][j+1]=max(dp[i+1][j+1],dp[i][j]+t[i].a+t[i].b*(j+wait));//砍dp[i+1][j]=max(dp[i+1][j],dp[i][j]);//不砍}}printf("%d\n",dp[n][m]);}return 0;}


0 0
原创粉丝点击