poj 2228 Naptime dp
来源:互联网 发布:个人工作室网站源码 编辑:程序博客网 时间:2024/05/16 09:31
这个题目的状态还是比较好想的,dp[i][j]表示已经睡了i个时段,最后睡在j时段的最优值,但是需要处理环的情况,我的做法是算两次,第一次不处理环,第二次强制性要求第一个时段需要睡,然后查看dp[m][n]+a[1]的值是否更优。
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn=4e3+9;int a[maxn],dp[maxn][maxn];inline int max(int a,int b){ if(a>b) return a; else return b;}int main(){// freopen("in.txt","r",stdin); int n,m; while(scanf("%d %d",&n,&m)!=EOF) { for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) dp[i][j]=0; for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int k=2,ret;k<=m;k++) { ret=0; for(int i=k;i<=n;i++) { dp[k][i]=max(ret,dp[k-1][i-1]+a[i]); ret=max(ret,dp[k-1][i-1]); } } int ans=0; for(int i=m;i<=n;i++) ans=max(dp[m][i],ans); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) dp[i][j]=0; dp[2][2]=a[2]; for(int k=3,ret;k<=m;k++) { ret=0; for(int i=k;i<=n;i++) { dp[k][i]=max(ret,dp[k-1][i-1]+a[i]); ret=max(ret,dp[k-1][i-1]); } } if(m>=2) ans=max(ans,dp[m][n]+a[1]); cout<<ans<<endl; } return 0;}
- poj 2228 Naptime dp
- POJ 2228 Naptime 环状DP
- POJ 2228 Naptime (DP) #by Plato
- POJ 2228 Naptime
- poj 2228 Naptime
- POJ 2228 Naptime
- 【poj 2228】 poj 2228 Naptime dp 环形dp的特殊处理
- TOJ 1631 Naptime -- 环形DP
- bzoj 1737: [Usaco2005 jan]Naptime 午睡时间 (DP)
- [BZOJ1737][Usaco2005 jan]Naptime 午睡时间(dp)
- poj2228 Naptime
- poj dp
- 【dp】POJ
- 【dp】POJ
- [DP] POJ
- [DP] POJ
- [DP] POJ
- 【dp】POJ
- HDU1069:Monkey and Banana(DP+贪心)
- Java运行内存分析
- Jsp out.print 和 out.write 区别
- [K/3Cloud]创建一个操作校验器
- jquery prototype 兼容
- poj 2228 Naptime dp
- 可粘贴镜头:让智能机拍照放大n倍
- SNMP4J 处理中文信息时的问题
- smarty modifier 函数
- Hadoop NameNode启动之DecommissionManager$Monitor(八)
- Java删除文件夹和文件
- sqlite应用【android菜鸟修行记(二)】8.30.2013
- windows 程序设计 位图
- [K/3Cloud]在插件中根据条件取消表单打开过程