noi openjudge 4 7搜尋 懷錶問題

2022-04-30 00:48:18 字數 793 閱讀 6019

為啥我覺得這是個dp….f[i][j][k][l]表示四種零件分別用了i,j,k,l個的方案數。然後發現這樣不能保證表一定能接在錶鏈首尾,也不知道狀態之間如何轉移,那麼加一維變成f[i][j][k][l][s],s表示首尾的狀態(4種),於是就可以預處理了。然後我們需要從給出的一共n個4種零件中選出k個。那麼dfs暴力列舉方案。

一開始dp求的狀態是i,j,k,l四維都取到1-40,算了一些冗餘狀態,t了……後來限制四維之和小於等於40,a了……不過慢死…好像別人是直接搜的,加個記憶化?因為真正用到的狀態數目不多所以會比較快?

#includetypedef 

long

long

ll;ll f[

45][45][45][45][4];//

4:首-尾字母

void dp()

} } } }

}int cnt[4

];int sol[4

];ll ans=0;int

s;int

n,k;

void dfs(int x,int

sum)

for(int i=0;i<=cnt[x]&&i<=sum;++i)

}int

main()

ans=0

; dfs(

0,k);

if(ans==0)printf("

no\n");

else printf("

yes\n%lld\n

",ans);

}return0;

}

noi openjudge 數字組合

有n個正整數,找出其中和為t t也是正整數 的可能的組合方式。如 n 5,5個數分別為1,2,3,4,5,t 5 那麼可能的組合有5 1 4和5 2 3和5 5三種組合方式。輸入的第一行是兩個正整數n和t,用空格隔開,其中1 n 20,表示正整數的個數,t為要求的和 1 t 1000 接下來的一行是...

NOI OpenJudge 7627 雞蛋的硬度

描述 有n層樓,m個雞蛋,如果雞蛋從第a層摔下來沒摔破,但是從a 1層摔下來時摔破了,那麼就說這個雞蛋的硬度是a。這些雞蛋硬度相同,在求雞蛋的硬度下問使用最優策略在最壞情況下所需要的扔雞蛋次數。樣例輸入 100 1 100 2樣例輸出 100 14這道題用的是動態規劃。f i j 表示i層樓j個雞蛋...

NOI OpenJudge 8468 單詞序列

8468 單詞序列 總時間限制 1000ms 記憶體限制 1024kb 描述 給出兩個單詞 開始單詞和結束單詞 以及乙個詞典。找出從開始單詞轉換到結束單詞,所需要的最短轉換序列。轉換的規則如下 1 每次只能改變乙個字母 2 轉換過程中出現的單詞 除開始單詞和結束單詞 必須存在於詞典中 例如 開始單詞...