POJ 3042 区间DP(费用提前计算相关的DP)
2016-10-28 11:46
387 查看
题意:
思路:
f[i][j][1]表示从i到j的区间全都吃完了 现在在j点 变质期最小是多少
f[i][j][0]表示从i到j的区间全都吃完了 现在在i点 变质期最小是多少
f[i][j][0]=min(f[i+1][j][0]+(s[i+1]-s[i])(n-j+i),f[i+1][j][1]+(s[j]-s[i])(n-j+i));
f[i][j][1]=min(f[i][j-1][1]+(s[j]-s[j-1])(n-j+i),f[i][j-1][0]+(s[j]-s[i])(n-j+i));
最后min(f[1]
[0],f[1]
[1])就是答案啦
思路:
f[i][j][1]表示从i到j的区间全都吃完了 现在在j点 变质期最小是多少
f[i][j][0]表示从i到j的区间全都吃完了 现在在i点 变质期最小是多少
f[i][j][0]=min(f[i+1][j][0]+(s[i+1]-s[i])(n-j+i),f[i+1][j][1]+(s[j]-s[i])(n-j+i));
f[i][j][1]=min(f[i][j-1][1]+(s[j]-s[j-1])(n-j+i),f[i][j-1][0]+(s[j]-s[i])(n-j+i));
最后min(f[1]
[0],f[1]
[1])就是答案啦
//By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int n,l,rec,s[1005],f[1005][1005][2]; int main(){ scanf("%d%d",&n,&l); for(int i=1;i<=n;i++)scanf("%d",&s[i]); s[++n]=l; sort(s+1,s+1+n); for(int i=1;i<=n;i++) if(s[i]==l)rec=l,f[i][i][0]=f[i][i][1]=0; else f[i][i][0]=f[i][i][1]=0x3fffffff; for(int i=rec;i;i--) for(int j=i+1;j<=n;j++){ f[i][j][0]=min(f[i+1][j][0]+(s[i+1]-s[i])*(n-j+i),f[i+1][j][1]+(s[j]-s[i])*(n-j+i)); f[i][j][1]=min(f[i][j-1][1]+(s[j]-s[j-1])*(n-j+i),f[i][j-1][0]+(s[j]-s[i])*(n-j+i)); } printf("%d\n",min(f[1] [0],f[1] [1])); }
相关文章推荐
- POJ 3042 区间DP(费用提前计算相关的DP)
- 【SDOI2008】【BZOJ】【P2037】【Sue的小球】【题解】【费用提前计算相关的DP】
- 【SDOI2008】【BZOJ】【P2037】【Sue的小球】【题解】【费用提前计算相关的DP】
- 费用提前计算相关的DP(BZOJ2037,POJ3042,ZOJ3469)
- spoj 1526 (BOI2007 day1) (费用提前计算相关的DP)
- zoj 3469 Food Delivery 区间dp + 提前计算费用
- 费用提前计算的区间dp*3
- BZOJ2037 [Sdoi2008] Sue的小球 (费用提前计算相关的DP)
- poj 3042 Grazing on the Run(区间DP,三维DP)
- poj 3042 区间dp(草的过期程度最小)
- 洛谷P1220关路灯[区间DP 提前计算代价]
- POJ 3042 Grazing on the Run (三维区间DP)【区间DP模板】
- 2017模拟赛 经营与开发(dp费用提前计算)
- POJ 3042 Grazing on the Run 区间dp
- POJ 3042 Grazing on the Run (区间DP)
- POJ1159 - Palindrome(区间DP)
- POJ 2955 括号匹配,区间DP
- POJ 2955 括号匹配,区间DP
- poj 2955 Brackets 区间DP
- poj 1141Brackets Sequence[区间dp]