[JZOJ P1276] [DP]郁闷的潜水员
@kaike
不会写..弱的一渣。
其实就是一个二维枚举,依次枚举氧气和氮气
加上第i个罐子的氧气和氮气
若氧气大于所要求的就满足
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 int yang,dan,n,a[1050],b[1050],c[1050],f[1050][1050]; 6 int main() 7 { 8 memset(f,10,sizeof(f));//因为要求最小值,所以初始化一个大值 9 f[0][0]=0;//前0个罐子满足要求的重量为0 10 cin>>yang>>dan; 11 cin>>n; 12 for(int i=1;i<=n;i++) 13 cin>>a[i]>>b[i]>>c[i]; 14 for(int i=1;i<=n;i++)//枚举每个罐子 15 for(int c1=yang;c1>=0;c1--)//枚举氧气 16 for(int c2=dan;c2>=0;c2--)//枚举氮气 17 { 18 int oo,nn;//oo来记录前i个罐子中气体的体积 19 oo=c1+a[i]; 20 nn=c2+b[i]; 21 if(oo>yang) oo=yang;//如果罐子中的体积大于需要的,就当成恰好满足,便于求最小值 22 if(nn>dan) nn=dan; 23 f[oo][nn]=min(f[oo][nn],f[c1][c2]+c[i]); 24 } 25 cout<<f[yang][dan]<<endl; 26 return 0; 27 }
No matter how you feel, get up , dress up , show up ,and never give up.