BZOJ 1694 & 1742 [Usaco 2005 nov] 区间DP 解题报告
2017-09-20 11:29
375 查看
1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草
Description
John养了一只叫Joseph的奶牛。一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草。我们可以认为草地是一个数轴上的一些点。Joseph看到这些草非常兴奋,它想把它们全部吃光。于是它开始左右行走,吃草。John和Joseph开始的时候站在p位置。Joseph的移动速度是一个单位时间一个单位距离。不幸的是,草如果长时间不吃,就会腐败。我们定义一堆草的腐败值是从Joseph开始吃草到吃到这堆草的总时间。Joseph可不想吃太腐败的草,它请John帮它安排一个路线,使得它吃完所有的草后,总腐败值最小。John的数学很烂,她不知道该怎样做,你能帮她么?
Input
Line 1 : Two space-separated integers: N and L. N<=1000
Lines 2..N+1: Each line contains a single integer giving the position P of a clump (1 <= P <= 1,000,000).
Output
Line 1: A single integer: the minimum total staleness Bessie can achieve while eating all the clumps.
Sample Input
4 10
1
9
11
19
Sample Output
44
【解题报告】
dp[i][j][0/1]表示从第i快草开始,吃了连续j快草,现在在左端或是右端的最小腐败程度。
代码如下:
Description
John养了一只叫Joseph的奶牛。一次她去放牛,来到一个非常长的一片地,上面有N块地方长了茂盛的草。我们可以认为草地是一个数轴上的一些点。Joseph看到这些草非常兴奋,它想把它们全部吃光。于是它开始左右行走,吃草。John和Joseph开始的时候站在p位置。Joseph的移动速度是一个单位时间一个单位距离。不幸的是,草如果长时间不吃,就会腐败。我们定义一堆草的腐败值是从Joseph开始吃草到吃到这堆草的总时间。Joseph可不想吃太腐败的草,它请John帮它安排一个路线,使得它吃完所有的草后,总腐败值最小。John的数学很烂,她不知道该怎样做,你能帮她么?
Input
Line 1 : Two space-separated integers: N and L. N<=1000
Lines 2..N+1: Each line contains a single integer giving the position P of a clump (1 <= P <= 1,000,000).
Output
Line 1: A single integer: the minimum total staleness Bessie can achieve while eating all the clumps.
Sample Input
4 10
1
9
11
19
Sample Output
44
【解题报告】
dp[i][j][0/1]表示从第i快草开始,吃了连续j快草,现在在左端或是右端的最小腐败程度。
代码如下:
/************************************************************** Problem: 1742 User: onepointo Language: C++ Result: Accepted Time:12 ms Memory:928 kb ****************************************************************/ #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define inf 0x3f3f3f3f int n,p,a[3030]; long long f[3030][2][2]; int main() { memset(f,inf,sizeof(f)); scanf("%d%d",&n,&p); for(int i=1;i<=n;++i) scanf("%d",&a[i]); a[++n]=p;sort(a+1,a+n+1); p=lower_bound(a+1,a+n+1,p)-a; f[p][1][0]=f[p][1][1]=0; for(int j=2;j<=n;j++) { for(int i=1;i<=n;i++) f[i][j&1][0]=f[i][j&1][1]=inf; for(int i=max(p-j+1,1);i<=min(p,n-j+1);i++) { if(i!=p) f[i][j&1][0]=min(f[i+1][~j&1][0]+abs(a[i+1]-a[i])*(n-j+1),f[i+1][~j&1][1]+abs(a[i+j-1]-a[i])*(n-j+1)); if(i!=p-j+1) f[i][j&1][1]=min(f[i][~j&1][1]+abs(a[i+j-1]-a[i+j-2])*(n-j+1),f[i][~j&1][0]+abs(a[i+j-1]-a[i])*(n-j+1)); } } printf("%lld",min(f[1][n&1][0],f[1][n&1][1])); return 0; }
相关文章推荐
- bzoj 1694 && 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草(DP)
- 【bzoj1742】[Usaco2005 nov]Grazing on the Run 边跑边吃草 区间dp
- bzoj 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草【区间dp】
- 【BZOJ1742】[Usaco2005 nov]Grazing on the Run 边跑边吃草【区间DP】
- BZOJ 1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草( dp )
- [bzoj1742][Usaco2005 nov][DP]Grazing on the Run 边跑边吃草
- [Usaco2005 nov]Grazing on the Run 边跑边吃草 BZOJ1742
- BZOJ 1682 [Usaco2005 Mar] 最小生成树 解题报告
- BZOJ1742: [Usaco2005 nov]Grazing on the Run 边跑边吃草
- [Usaco2011][bzoj2442][洛谷2527]修剪草坪解题报告(dp,贪心,单调队列)
- bzoj 1661: [Usaco2006 Nov]Big Square 巨大正方形 解题报告
- BZOJ 1694 && 2037 【DP……算是区间?
- Bzoj[2023/1630]: [Usaco2005 Nov]Ant Counting 数蚂蚁 DP+滚动数组
- BZOJ 1084 [SCOI 2005] DP 解题报告
- BZOJ 1742 Usaco2005 nov Grazing on the Run 边跑边吃草 动态规划
- BZOJ 4102 [Usaco2015 Open] 图上DP 解题报告
- [BZOJ1630/2023][Usaco2005 Nov]Ant Counting 数蚂蚁(dp)
- 【bzoj2023/1630】[Usaco2005 Nov]Ant Counting 数蚂蚁 (DP+前缀和+滚动数组)
- BZOJ 3384: [Usaco2004 Nov]Apple Catching 接苹果/BZOJ 1750: [Usaco2005 qua]Apple Catching dp
- [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP