您的位置:首页 > 其它

acdream 1025 简单dp

2015-08-01 20:25 501 查看
最基本的在DAG上求最短路。

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

const int INF = 999999;
const int N = 100001;
int dp
;

int main ()
{
int a, b;
while ( scanf("%d%d", &a, &b) != EOF )
{
if ( a > b )
{
printf("-1\n");
continue;
}
dp[a] = 0;
for ( int i = a + 1; i <= b; i++ )
{
dp[i] = INF;
}
for ( int i = a; i < b; i++ )
{
int j;
for ( j = 1; j * j < i; j++ )
{
if ( i % j ) continue;
int x = i + j;
if ( x <= b )
{
dp[x] = min( dp[x], dp[i] + 1 );
}
int y = i + i / j;
if ( y <= b )
{
dp[y] = min( dp[y], dp[i] + 1 );
}
}
if ( i % j == 0 )
{
int z = i + j;
if ( z <= b )
{
dp[z] = min( dp[z], dp[i] + 1 );
}
}
}
printf("%d\n", dp[b]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: