3 条题解
-
4
f[i][0]表示走完第i行且停在第i行的左端点最少用的步数 f[i][1]表示走完第i行且停在第i行的右端点的最少步数。 那么转移就很简单了,走完当前行且停到左端点,那么一定是从当前行的右端点过来的。
从上一行左端点转移到当前行的右端点,最终停留在当前行的左端点的话就是: f[i][0]=f[i-1][0]+abs(上一行左端点的坐标-本行右端点的坐标)+本行线段长度 从上一行右端点转移到当前行的右端点,最终停留在当前行的左端点就是: f[i][0]=f[i-1][1]+abs(上一行右端点的坐标-本行右端点的坐标)+本行线段长度 取二者的最小值
从上一行左端点转移到当前行的左端点,最终停留在当前行的右端点的话就是: f[i][1]=f[i-1][0]+abs(上一行左端点的坐标-本行左端点的坐标)+本行线段长度 从上一行右端点转移到当前行的左端点,最终停留在当前行的右端点就是: f[i][1]=f[i-1][1]+abs(上一行右端点的坐标-本行左端点的坐标)+本行线段长度 取二者的最小值
边界f[1][0]=r[1]-1+第一行线段长度, f[1][1]=r[1]-1
参考代码
//最初利润为0,若第一天是买入状态,利润为-a[1],若第一天是可买入状态,说明第一题没有买股票,利润为0,第一天不可能为冷冻期。 f[1][0] = r[1] - 1 + len[1]; f[1][1] = r[1] - 1 ; for (int i = 2; i <= n; i++) { f[i][0] = min(f[i - 1][0] + abs(r[i] - l[i-1]), f[i - 1][1] + abs(r[i-1] - r[i])) + len[i] + 1; f[i][1] = min(f[i - 1][0] + abs(l[i-1] - l[i]), f[i - 1][1] + abs(r[i-1] - l[i])) + len[i] + 1; }
-
-4
#include <bits/stdc++.h> using namespace std; int f[20005][3]; int abs(int x) { if(x<0)return -x; return x; } int min(int x,int y) { if(x<y)return x; return y; } int L[20005],R[20005]; int main() { int n; cin >> n; for(int i=1;i<=n;i++) { cin >> L[i] >> R[i]; } f[1][0]=L[1]-1+(R[1]-L[1])*2; f[1][1]=R[1]-1; for(int i=2;i<=n;i++) { f[i][0]=min(f[i-1][1]+abs(R[i-1]-R[i]),f[i-1][0]+abs(L[i-1]-R[i]))+R[i]-L[i]+1; f[i][1]=min(f[i-1][1]+abs(R[i-1]-L[i]),f[i-1][0]+abs(L[i]-L[i-1]))+R[i]-L[i]+1; } cout << min(f[n][0]+n-L[n],f[n][1]+n-R[n]); return 0; }
-
-6
#include<cstdio> using namespace std; int f[20005][3];//设f[i][0]表示走完了第i行且走到左端点;设f[i][1]表示走完了第i行且走到了右端点。 int abs(int x) { if(x<0)return -x; return x; } int min(int x,int y) { if(x<y)return x; return y; } int L[20005],R[20005]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&L[i],&R[i]); } f[1][0]=L[1]-1+(R[1]-L[1])*2; f[1][1]=R[1]-1; for(int i=2;i<=n;i++) { f[i][0]=min(f[i-1][1]+abs(R[i-1]-R[i]),f[i-1][0]+abs(L[i-1]-R[i]))+R[i]-L[i]+1; f[i][1]=min(f[i-1][1]+abs(R[i-1]-L[i]),f[i-1][0]+abs(L[i]-L[i-1]))+R[i]-L[i]+1; } printf("%d\n",min(f[n][0]+n-L[n],f[n][1]+n-R[n])); return 0; }
- 1
信息
- ID
- 351
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- (无)
- 递交数
- 393
- 已通过
- 263
- 上传者