将自己历史的AC共享
zoj3141 DP题
dp[i][j]=min(dp[r][j]+dp[i-r][j]+1, dp[i][k]+dp[i][j-k]+1) 0=
//1759591 2009-02-06 21:15:23 Accepted 3141 C++ 70 420 green tea
#include <cstdio>
#include <algorithm>
using namespace std;
int dp[250][250];
int main()
{
int T, r, c, i, j, k, n;
for ( i = 0; i < 250; ++i )
for ( j = 0; j < 250; ++j )
dp[i][j] = 100000000;
for ( i = 1; i < 250; ++i )
dp[i][i] = 0;
for ( i = 0; i < 250; ++i )
dp[0][i] = dp[i][0] = 0;
for ( i = 1; i < 250; ++i )
for ( j = 1; j < 250; ++j ) {
for ( k = 0; k <= i; ++k ) {
if ( dp[i][j] > dp[k][j]+dp[i-k][j]+1 )
dp[i][j] = dp[k][j]+dp[i-k][j]+1;
}
for ( k = 0; k <= j; ++k ) {
if ( dp[i][j] > dp[i][k]+dp[i][j-k]+1 )
dp[i][j] = dp[i][k]+dp[i][j-k]+1;
}
}
scanf("%d", &T);
while ( T-- ) {
scanf("%d%d", &r, &c);
printf("%d\n", dp[r][c]);
}
return 0;
}
如觉得还有问题 可参考其他相关文章
zoj3141 其他1
zoj3141 其他2