zoj 2059 The Twin Towers
2012-01-21 20:52
351 查看
/* zoj_2059 dp 经典dp! 这题很经典很经典。一开始以为全部小块都要用完觉的是很简单的dp,wa了无数次才发现不是 每一块都一定要用的。。 完全看别人的思路做的。感觉不太容易想。 dp[i]表示两塔差值为i时较低塔的最大高度。 */ #include <iostream> #include <cstdio> #include <limits.h> #include <string.h> #define max(a,b) a>b?a:b using namespace std; int dp[2001],t[2001]; int main() { int n,i,j,v; while( scanf( "%d",&n ) && n>=0 ) { memset( dp,-1,sizeof(dp) ); memset( t,-1,sizeof(t) ); dp[0]=t[0]=0; while( n-- ) { scanf( "%d",&v ); for( i=0;i<2001;i++ ) { if( dp[i]!=-1 ) { if( i+v<2001 ) t[i+v]=max( t[i+v],dp[i] ); //加到高的塔上 if( v<i ) t[i-v]=max( t[i-v],dp[i]+v ); //加到低的塔上,且增加以后仍为较低塔 else t[v-i]=max( t[v-i],dp[i]+i ); //加到低的塔上,增加以后变为较高塔 } } memcpy( dp,t,sizeof(t) ); } if( dp[0]==0 ) printf( "Sorry\n" ); else printf( "%d\n",dp[0] ); } return 0; }
相关文章推荐
- zoj 2059 - The Twin Towers
- ZOJ 2059 The Twin Towers
- The Twin Towers
- UVA 10066 The Twin Towers
- UVa 10066: The Twin Towers
- UVaOJ_10066 - The Twin Towers
- Uva-10066-The Twin Towers
- zoj 2338 The Towers of Hanoi Revisited
- UVA 10066 The Twin Towers
- UVA10066 - The Twin Towers
- uva 10066 The Twin Towers
- uva 10066 The Twin Towers
- UVA--10066 The Twin Towers
- UVa:10066 The Twin Towers
- UVa 10066 - The Twin Towers
- uva 10066 The Twin Towers
- UVa 10066 - The Twin Towers
- UVa 10066 The Twin Towers (DP&LCS)
- On the Petronas Twin Towers
- ZOJ-2338 The Towers of Hanoi Revisited 输出汉诺塔的最优解移动过程