[NOIP2006] 金明的预算方案
生活随笔
收集整理的這篇文章主要介紹了
[NOIP2006] 金明的预算方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:
傳送門
題解:
由于最多只有兩件物品,所以轉移主件的時候暴力轉移附件即可
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #define ll long long #define N 40000 using namespace std;int n,m,dp[N],w[100],v[100],son[100][10]; bool bj[100];int gi() {int x=0,o=1; char ch=getchar();while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar();if(ch=='-') o=-1,ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return o*x; }int main() {m=gi(),n=gi();for(int i=1; i<=n; i++) {w[i]=gi(),v[i]=w[i]*gi();int x=gi();if(x) son[x][++son[x][0]]=i,bj[i]=1; }for(int i=1; i<=n; i++) {if(bj[i]) continue;for(int j=m; j>=0; j--) {if(son[i][0]>=0) {if(j-w[i]>=0) dp[j]=max(dp[j],dp[j-w[i]]+v[i]);}if(son[i][0]>=1) {if(j-w[i]-w[son[i][1]]>=0)dp[j]=max(dp[j],dp[j-w[i]-w[son[i][1]]]+v[i]+v[son[i][1]]);if(j-w[i]-w[son[i][2]]>=0)dp[j]=max(dp[j],dp[j-w[i]-w[son[i][2]]]+v[i]+v[son[i][2]]);}if(son[i][0]>=2) {if(j-w[i]-w[son[i][1]]-w[son[i][2]]>=0)dp[j]=max(dp[j],dp[j-w[i]-w[son[i][1]]-w[son[i][2]]]+v[i]+v[son[i][1]]+v[son[i][2]]);}}}printf("%d\n", dp[m]);return 0; }轉載于:https://www.cnblogs.com/HLXZZ/p/7670100.html
總結
以上是生活随笔為你收集整理的[NOIP2006] 金明的预算方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 'Lock wait timeout e
- 下一篇: oracle 12.1的那些坑