01鑳屽寘璺緞鍥炴函

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01鑳屽寘璺緞鍥炴函相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/%5cn' title=' '>    size   main   http   pac   amp   namespace   ace   fine   

浠ユ棰樹负渚?a title="鐗涘渚嬮" href="https://www.nowcoder.com/acm/contest/141/A" target="_blank">https://www.nowcoder.com/acm/contest/141/A

棰樿В

01鑳屽寘鏈夐€夊彇鍜屼笉閫夊彇涓ょ鎿嶄綔锛屾瘡娆¤褰曢€夊彇鐨勬搷浣滃湪涓€涓柊鐨勬暟缁勪腑銆?/p>

鍥炴函鏃跺垯鍑忎笅姣忔鍔犱笂鐨勶紝灏辨槸杩囨潵鏃剁殑璺緞銆?/p>

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define N 37
 4 int n;
 5 int p[40],a[40],c[40],m[40],g[40];
 6 int P,A,C,M;
 7 short dp[N][N][N][N];
 8 bool tk[N][N][N][N][N];
 9 int main()
10 {
11     scanf("%d",&n);
12     for (int i = 1; i <=n ; ++i) {
13         scanf("%d %d %d %d %d",&p[i],&a[i],&c[i],&m[i],&g[i]);
14     }
15     scanf("%d %d %d %d",&P,&A,&C,&M);
16     for (int i = 1; i <=n ; ++i) {
17         for (int j = P; j >=p[i] ; j--) {
18             for (int k = A; k >=a[i] ; k--) {
19                 for (int l = C; l >=c[i] ; l--) {
20                     for (int x = M; x >=m[i] ; x--) {
21                         if(dp[j][k][l][x]<=dp[j-p[i]][k-a[i]][l-c[i]][x-m[i]]+g[i])
22                         {
23                             dp[j][k][l][x] = dp[j-p[i]][k-a[i]][l-c[i]][x-m[i]]+g[i];
24                             tk[i][j][k][l][x]=true;
25                         }
26                     }
27                 }
28             }
29         }
30     }
31     vector<int>ans;
32     for(int i=n; i>0; --i) {
33         if(tk[i][P][A][C][M] == 1) {
34             ans.push_back(i-1);
35             P -= p[i], A -= a[i], C -= c[i], M -= m[i];
36         }
37         if(P<0 || A<0 || C<0 || M<0) break;
38     }
39     printf("%d
",(int)ans.size());
40     sort(ans.begin(),ans.end());
41     for(auto i : ans) printf("%d
", i);
42     return 0;
43 }

 

以上是关于01鑳屽寘璺緞鍥炴函的主要内容,如果未能解决你的问题,请参考以下文章

鍥炴函绠楁硶鍜屽姩鎬佽鍒掞紝鍒板簳璋佹槸璋佺埞锛熸枃鏈€佷功

[鑳屽寘涔濊1]

绠楁硶鍔ㄦ€佽鍒掞紙浜旓級-鑳屽寘闂2

鍔ㄦ€佽鍒掕繘闃剁瘒1---鑳屽寘闂

绠楁硶鍔ㄦ€佽鍒掞紙涓冿級-鑳屽寘闂4

瀹屽叏鑳屽寘杈撳嚭鏂规鏁帮紙dp)