[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 }
蠢哭了

 

posted @ 2016-10-13 10:13  kaike  阅读(196)  评论(0编辑  收藏  举报