摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=1838其实原先不知道这题是DP 我都想不到DP去想了想没思路 看了下题解 经典思路 :第n大的都是由第n-1大的推出来的记录以a(i,j)为右下端所能构成的最大棋盘 若a[i-1][j]和a[i][j-1]都与它不同 而且a[i-1][j-1]与它相同 则dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1 之所以是最小 是因为它要保证能全部构成 如:1011010110100101dp[4][4] 如果可以由dp[3][3]推的话 就错了 应该是由dp[3 阅读全文
摘要:
http://poj.org/problem?id=1088据说这题叫经典记忆化搜索 瞎写了下就过了 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define INF 0xfffffff 8 int a[110][110],dp[110][110]; 9 int find(int i,int j)10 {11 if(dp[i][j])12 return dp[i][j];13 int x=0,y=0,z=0,o=0;14 if(a[i][j]>... 阅读全文
摘要:
http://poj.org/problem?id=2229挺好的一公式。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 1000010 8 #define mod 1000000000 9 long long dp[N];10 int a[N];11 int main()12 {13 int i,j,k,n;14 while(cin>>n)15 {16 memset(dp,0,sizeof(dp));17 ... 阅读全文