演算法:dp
分析:看了題解之後,發現這道題並不是那麼難做,之前一直沒有看出這道題究竟dp在哪,現在終於明白了。
用f[st,a,b,c]表示到st這個位置時,剩餘a(a個),b(b個),c(c個),然後就進行dp,每次可以選擇放a或放b或放c。總共有三種轉移方式。
其實這到題的dp不是特別的明顯,還是比較像記憶化搜尋。
program worker;
const
maxn=100;
var n:longint;
a:array [0..maxn] of longint;
f:array [0..maxn,0..10,0..10,0..10] of longint;
b:array [0..maxn,0..10,0..10,0..10] of boolean;
procedure init;
var i:longint;
t:char;
begin
fillchar(b,sizeof(b),false);
fillchar(f,sizeof(f),100);
readln(n);
for i:=1 to n do
begin
readln(t);
a[i]:=ord(t)-64;
end;
end;
function min(x,y:longint):longint;
begin
if x=n then
begin
f[n,a1,b1,c1]:=ord(a1>0)+ord(b1>0)+ord(c1>0);
b[n,a1,b1,c1]:=true;
exit(f[n,a1,b1,c1]);
end;
if b[st,a1,b1,c1] then exit(f[st,a1,b1,c1])
else
begin
b[st,a1,b1,c1]:=true;
f[st,a1,b1,c1]:=min(f[st,a1,b1,c1],dfs(st,0,b1,c1)+1);
f[st,a1,b1,c1]:=min(f[st,a1,b1,c1],dfs(st,a1,0,c1)+1);
f[st,a1,b1,c1]:=min(f[st,a1,b1,c1],dfs(st,a1,b1,0)+1);
end;
exit(f[st,a1,b1,c1]);
end;
begin
init;
writeln(dfs(0,0,0,0));
end.
SHOI2001 化工廠裝箱員
118號工廠是世界唯一秘密提煉鉲的化工廠,由於提煉鉲的難度非常高,技術不是十分完善,所以工廠生產的鉲成品可能會有3種不同的純度,a 100 b 1 c 0.01 為了 方便,必須把不同純度的成品分開裝箱,裝箱員grant第1次順序從流水線上取10個成品 如果一共不足10個,則全部取出 以後每一次把手...
數碼化工廠
上個星期五出去開會,會議的主題是數碼化工廠平台的建設。由上海交通大學的乙個教授進行課題的組織,企業參加進行討論。由企業提出需求,教授的課題組進行總結。教授一開始,做了乙個關於數碼化工廠的最新研究現狀的報告。由於語速較快,也沒有聽得到其中的太多的精髓內容。但是,他介紹的數碼化工廠引入了雲計算 物聯網等...
洛谷 P2530 SHOI2001 化工廠裝箱員
題目描述 118號工廠是世界唯一秘密提煉鉲的化工廠,由於提煉鉲的難度非常高,技術不是十分完善,所以工廠生產的鉲成品可能會有3種不同的純度,a 100 b 1 c 0.01 為了 方便,必須把不同純度的成品分開裝箱,裝箱員grant第1次順序從流水線上取10個成品 如果一共不足10個,則全部取出 以後...