problem description
給你乙個n*n的格仔的棋盤,每個格仔裡面有乙個非負數。
從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。
input
包括多個測試例項,每個測試例項包括乙個整數n 和n*n個非負數(n<=20)
output
對於每個測試例項,輸出可能取得的最大的和
sample input
375 15 21
75 15 28
34 70 5
sample output
188與hdu1074有點相似,還是用二進位制來記錄表示取或者不取,一行行的進行計算,用乙個陣列記錄上一行的所有取法,乙個陣列記錄現在這行的所有取法,如果取法進行與運算為1的話,那麼就代表有相鄰的而不進行計算,然後這樣一直dp到最後一行便可以得到最後的結果
#include
#include
#include
using
namespace
std;const
int l = 20000;int n,a[20][20];int dp[l],tem[l];int now[l],pre[l];int ans[l],pre_size,now_size;void
dfs(int id,int k,int p,int sum)
dfs(id,k+2,p|(1
dp()
} for(i = 1; i<=now_size; i++)//目前這行的狀態儲存為上一行 pre_size = now_size; }}int
main
() return
0;}
再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!
problem description
給你乙個n*n的格仔的棋盤,每個格仔裡面有乙個非負數。
從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。
input
包括多個測試例項,每個測試例項包括乙個整數n 和n*n個非負數(n<=20)
output
對於每個測試例項,輸出可能取得的最大的和
sample input
375 15 21
75 15 28
34 70 5
sample output
188與hdu1074有點相似,還是用二進位制來記錄表示取或者不取,一行行的進行計算,用乙個陣列記錄上一行的所有取法,乙個陣列記錄現在這行的所有取法,如果取法進行與運算為1的話,那麼就代表有相鄰的而不進行計算,然後這樣一直dp到最後一行便可以得到最後的結果
#include
#include
#include
using
namespace
std;const
int l = 20000;int n,a[20][20];int dp[l],tem[l];int now[l],pre[l];int ans[l],pre_size,now_size;void
dfs(int id,int k,int p,int sum)
dfs(id,k+2,p|(1
dp()
} for(i = 1; i<=now_size; i++)//目前這行的狀態儲存為上一行 pre_size = now_size; }}int
main
() return
0;}
HDU 1565 方格取數 1
hdu 1565 方格取數 1 我的第乙個狀態壓縮dp 給你乙個n n的格仔的棋盤,每個格仔裡面有乙個非負數,從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大 3 75 15 21 75 15 28 34 70 5 188對於每乙個數...
HDU1565 方格取數 1
problem description 給你乙個n n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。input 包括多個測試例項,每個測試例項包括乙個整數n 和n n個非負數 n 20 ou...
HDU 1565 方格取數 1
problem description 給你乙個n n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。input 包括多個測試例項,每個測試例項包括乙個整數n 和n n個非負數 n 20 ou...