P2340 奶牛會展 DP 揹包

2022-05-20 22:41:17 字數 880 閱讀 6994

\(n\)頭牛,每頭牛有智商\(s[i]\)情商\(f[i]\),問如何從中選擇幾頭牛使得智商情商之和最大 且 情商之和、智商之和非負

\(n\le 400,-10^3\le s[i] \le 10^3\)

看似兩維難以處理,我們可以先考慮一維,做體積為智商、價值為情商的01揹包,最後遍歷體積不為負的狀態更新答案即可。

需要注意的是,體積可能為負,所以我們整體加\(400\times1000\);負數體積遍歷揹包時,因為已經壓縮了一維,原本要倒序遍歷體積,但是這裡是負數,所以要正序遍歷(否則會覆蓋之前的狀態)

另外這裡的揹包體積是恰好填滿,所以初值要全部設為-inf,而不是\(0\)

#include #include #include using namespace std;

inline int read()

while(ch>='0'&&ch<='9') s=s*10+(ch^'0'), ch=getchar();

if(isf) return -s;

return s;

}#define maxn 404

#define base 400*1000

int n;

int s[maxn],f[maxn];

int dp[800008];

int main()

int ans=0;

for(int i=base;i<=mxs+base;++i)

if(dp[i]>=0)

ans=max(ans, i-base+dp[i]);

printf("%d\n", ans);

return 0;

}

P2340 奶牛會展

f i 表示當 智商為i 時,情商 最高為多 少f i 表示當智商為i時,情商最高為多少 f i 表示 當智商為 i時,情 商最高為 多少具體類似講解請移步我的另一篇部落格 include define rep i,a,b for register int i a i b i define don ...

P2340 奶牛會展(狀壓dp)

奶牛想證明它們是聰明而風趣的。為此,貝西籌備了乙個奶牛博覽會,她已經對n 頭奶牛進行 了面試,確定了每頭奶牛的智商和情商。貝西有權選擇讓哪些奶牛參加展覽。由於負的智商或情商會造成負面效果,所以貝西不希望出展奶牛的智商之和小於零,或情商之和小於零。滿足這兩個條件下,她希望出展奶牛的智商與情商之和越大越...

洛谷P2340 奶牛會展

題目背景 奶牛想證明它們是聰明而風趣的。為此,貝西籌備了乙個奶牛博覽會,她已經對n 頭奶牛進行 了面試,確定了每頭奶牛的智商和情商。題目描述 貝西有權選擇讓哪些奶牛參加展覽。由於負的智商或情商會造成負面效果,所以貝西不希望出展奶牛的智商之和小於零,或情商之和小於零。滿足這兩個條件下,她希望出展奶牛的...