#include<bits/stdc++.h>
using namespace std;
#define maxn 10010
#define INF 100000000
int n,a[maxn],d[maxn];
int dp[maxn][maxn][2];
int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
scanf("%d%d",&a[i],&d[i]);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
dp[i][j][0]=dp[i][j][1]=INF;
}
}
for(int i=1;i<=n;i++)dp[i][i][0]=dp[i][i][1]=0;
for(int len=2;len<=n;len++)
{
for(int l=1;l+len-1<=n;l++)
{
int r = l+len-1;
dp[l][r][1] = min(dp[l][r-1][0]+(a[r]-a[l]),dp[l][r-1][1]+(a[r]-a[r-1]));
if(dp[l][r][1]>=
【DP 训练】Alibaba, ACM/ICPC SEERC 2004, UVa1632
最新推荐文章于 2018-05-02 23:35:00 发布
这是一个使用C++实现的动态规划(DP)解决方案,针对ACM/ICPC SEERC 2004比赛题目。代码中定义了二维数组dp来存储子问题的解,并通过迭代更新dp数组,最终找到最短路径。程序读取输入的n个数据点,计算满足条件的最小代价,输出结果。
摘要由CSDN通过智能技术生成