UVa 10003 - Cutting Sticks
2013-04-01 15:20
218 查看
记忆化搜索。还有递归调用。大概题意就是一根木棍的长度length,按他所给的点切割。求最大的价值。
X , Y 表示 X点到Y点的。转移方程vis[X][Y] = min ( DP[X][i] + DP[i][Y] + ar[Y] - ar[X] ) ,i表示X,Y之间的切割点
X , Y 表示 X点到Y点的。转移方程vis[X][Y] = min ( DP[X][i] + DP[i][Y] + ar[Y] - ar[X] ) ,i表示X,Y之间的切割点
#include <iostream> #include <algorithm> #include <cstring> const int INF = 500000; using namespace std; int vis[60][60], ar[60], Case, length; int DP ( int x, int y ) { if ( vis[x][y] != -1 ) return vis[x][y]; vis[x][y] = INF; for ( int i = x + 1; i < y; ++i ) vis[x][y] = min ( vis[x][y], DP ( x, i ) + DP ( i, y ) + ( ar[y] - ar[x] ) ); if ( vis[x][y] == INF ) vis[x][y] = 0; return vis[x][y]; } int main ( ) { while ( cin >> length, length ) { cin >> Case; ar[0] = 0; ar[Case + 1] = length; for ( int i = 1; i <= Case; ++i ) cin >> ar[i]; memset ( vis, -1, sizeof ( vis ) ); cout << "The minimum cutting is " << DP ( 0, Case + 1 ) << "." <<endl; } return 0; }
相关文章推荐
- UVA Problem 10003 Cutting Sticks (切割木棍)
- UVa 10003 - Cutting Sticks 区间dp
- UVA 10003 - Cutting Sticks
- UVA 10003 - Cutting Sticks
- uva10003 - Cutting Sticks(DP,区间)
- UVA 10003 Cutting Sticks
- UVa 10003 Cutting Sticks
- UVa 10003:Cutting Sticks(DP)
- UVA 10003 Cutting Sticks 区间DP
- UVA 10003 - Cutting Sticks
- UVA 10003 - Cutting Sticks (区间DP)
- UVa10003 Cutting Sticks
- uva10003 - Cutting Sticks(DP,区间)
- UVa 10003 Cutting Sticks (DP)
- Uva-10003-Cutting Sticks
- UVA10003 Cutting Sticks
- UVA 10003 Cutting Sticks
- uva 10003 cutting sticks
- UVa10003 cutting sticks
- uva 10003- Cutting Sticks (记忆化搜索)