hdu6249 区间动态规划
Posted carcar
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu6249 区间动态规划相关的知识,希望对你有一定的参考价值。
题目链接
题意:给出一些区间,求选k个区间能覆盖的最多点的数量
思路:定义dp[i][j]为前i个点取j个区间的最大值。dp[i][j]可以转移到dp[i+1][j+1]和以i+1为起点的区间终点
具体可以看代码
#include <iostream> #include <cstdio> using namespace std; #define ll long long const int maxn = 2005; int t[maxn],dp[maxn][maxn]; int main() { int T; cin>>T; for(int cn=1;cn<=T;cn++) { int ans=0; int n,m,k; scanf("%d %d %d",&n,&m,&k); for(int i=0;i<=n;i++) { for(int j=0;j<=k;j++)dp[i][j]=0; t[i]=0; } for(int i=1;i<=m;i++) { int x,y; scanf("%d %d",&x,&y); for(int j=x;j<=y;j++) { t[j]=max(t[j],y); } } for(int i=1;i<=n;i++) { for(int j=1;j<=k;j++) { if(t[i]) dp[t[i]][j]=max(dp[t[i]][j],dp[i-1][j-1]+t[i]-i+1); dp[i][j]=max(dp[i][j],dp[i-1][j]); } } for(int i=1;i<=n;i++) for(int j=1;j<=k;j++) ans=max(ans,dp[i][j]); cout<<"Case #"<<cn<<": "; cout<<ans<<endl; } return 0; }
以上是关于hdu6249 区间动态规划的主要内容,如果未能解决你的问题,请参考以下文章
HDU 6249 Alice’s Stamps(CCPC-Final G题,DP)