动态规划专项intermediate:UVa 11766
来源:互联网 发布:淘宝首页自定义优惠券 编辑:程序博客网 时间:2024/05/16 11:00
这道题关键就是模型的转化,只要把a、b两个值转化为一个[a+1,n-b]的区间问题就很容易考虑了。这样问题就变成了求区间[1,n]上无重叠部分区间的最大值,但有一点不同的是,完全相同的区间最多可以取区间长度个,即n-a-b个。最后,n减去dp所得的值即为结果。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct car{ int a,b; bool operator<(const car& tmp) const { return a<tmp.a||(a==tmp.a&&b<tmp.b); }} c[1010];int n,m;int dp[1010][1510];int vis[1010][1510];int dfs(int cur,int end){ if(cur==m) return 0; if(vis[cur][end]) return dp[cur][end]; vis[cur][end]=1; int &ans=dp[cur][end]; int cnt=1; for(int i=cur+1;i<m;i++) if(c[cur].a==c[i].a&&c[cur].b==c[i].b) cnt++; else break; ans=dfs(cur+cnt,end); if(c[cur].a+1>end) ans=max(ans,dfs(cur+cnt,n-c[cur].b)+min(cnt,n-c[cur].a-c[cur].b)); return ans;}int main(){ freopen("in.txt","r",stdin); int kase=1; while(cin>>n&&n) { m=0; for(int i=0;i<n;i++) { int a,b; cin>>a>>b; if(a+b>=n) continue; c[m].a=a;c[m++].b=b; } sort(c,c+m); memset(vis,0,sizeof(vis)); cout<<"Case "<<kase++<<": "; cout<<n-dfs(0,0)<<endl; } return 0;}
- 动态规划专项intermediate:UVa 11766
- 动态规划专项intermediate:UVa 10271
- 动态规划专项intermediate:UVa 10304
- 动态规划专项intermediate:UVa 11600
- 动态规划专项intermediate:UVa 10934
- 动态规划专项intermediate:UVa 10981
- 动态规划专项intermediate:UVa 12002
- 动态规划专项intermediate:UVa 10688
- 动态规划专项intermediate:UVa 11400
- 动态规划专项intermediate:UVa 10599
- 动态规划专项intermediate:LA 4015
- 动态规划专项intermediate:LA 4490
- 动态规划专项intermediate:LA 4327
- 动态规划intermediate:UVa 11456
- 动态规划intermediate:UVa 10239
- 动态规划intermediate:UVa 10604
- 动态规划intermediate:LA 4945
- 动态规划intermediate:LA 6042
- <转载> struts2文件上传
- Memcached 应对高并发攻击
- LightOJ 1277 Looking for a Subsequence (LIS)
- 2013年元旦,大家都在做什么呢
- 计算几何的一些模版
- 动态规划专项intermediate:UVa 11766
- 一种灵活的WPF程序多国语言支持
- 第一个用struts2处理中文的例子
- 内存管理——虚拟内存
- Edit Control 控件自动换行
- WPF中DataTemplate基本原理与缺陷分析
- 伪随机数
- 安装Joomla/模板/第三方扩展时注意事项
- Xcode 遇到的问题