本人水平有限,題解不到為處,請多多諒解
本蒟蒻謝謝大家**
題目:time limit: 1 sec memory limit: 128 mb
submit: 89 solved: 43
[submit][status][web board]
n個人在做傳遞物品的遊戲,編號為1-n。遊戲規則是這樣的:開始時物品可以在任意一人手上,他可把物品傳遞給
其他人中的任意一位;下乙個人可以傳遞給未接過物品的任意一人。即物品只能經過同乙個人一次,而且每次傳遞
過程都有乙個代價;不同的人傳給不同的人的代價值之間沒有聯絡;求當物品經過所有n個人後,整個過程的總代
價是多少。
第一行為n,表示共有n個人(16>=n>=2);
以下為n*n的矩陣,第i+1行、第j列表示物品從編號為i的人傳遞到編號為j的人所花費的代價,
特別的有第i+1行、第i列為-1(因為物品不能自己傳給自己),其他資料均為正整數(<=10000)。
乙個數,為最小的代價總和。
2-1 9794
2724 –1
2724f[i][j]表示在當前狀態下的以j結尾需要的最小代價總和;
dis[i][j]表示以i開始,以j結尾的距離;
讀入時可以手動把n=-1給特判掉;
初始化:for(i=1 to down n) f[1<
轉移:f[i][j]=min(f[i][j],f[i^1<
結尾:for(i=1 to down (1<
code:
#includeusingnamespace
std;
intn;
int dis[21][21
];int
ans;
int f[1
<<20][21
];inline
intread()
while(ch>='
0'&&ch<='9'
)
return x*f;
}inline
void write(int
x)
while(cnt>0)putchar(f[--cnt]) ;
}int
main()
}memset(f,
0x3f,sizeof
(f));
for(int i=1;i<=n;i++)
f[1<1][i]=0
;
for(int i=1;i<=(1
<1;i++)}}
}}
for(int i=1;i<=n;i++)
ans=min(ans,f[(1
<1
][i]);
write(ans);
}cout
0;
}
狀壓DP入門
洛谷題號p1896 在n n的棋盤裡面放k個國王,使他們互不攻擊,共有多少種擺放方案。國王能攻擊到它上下左右,以及左上左下右上右下八個方向上附近的各乙個格仔,共8個格仔。題解 首先暴搜可肯定是超時的所以我門考慮狀壓 因為每個數都可以用二進位制表示出來 二進位制中01可以表示當前行放的棋子的位置 以及...
狀壓DP入門
首發於摸魚世界 狀壓dp,即狀態壓縮dp,它的精髓在於把dp過程中的乙個 狀態 用乙個二進位制數巧妙的表示出來。接下來就從一些入門的狀壓題目來感受一下狀壓的魅力吧 洛谷p5911 poi2004 prz 大致題意 n 個人過最大承載 w 重量的橋,每個人有重量 w i 與過橋時間 t i 多人一組時...
狀壓DP入門題
學習狀壓之前必須要熟練掌握位運算 位運算名 符號效果 and 按位與如果兩個相應的二進位制位都為1,則該位的結果值為1,否則為0 l or 按位或兩個相應的二進位制位中只要有乙個為1,該位的結果值為1 xor 按位異或 單身狗操作 若參加運算的兩個二進位制位值相同則為0,否則為1 取反 一元運算子,...