Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- std::ifstream f("bete.in");
- std::ofstream g("bete.out");
- int n,capacity,dp[1001][10001];
- std::vector<int>wt,sol;
- void read(){
- f >> n >> capacity;
- wt.resize(n + 1);
- for(int i = 1;i <= n;i++)
- f >> wt[i];
- }
- void precalc(){
- for(int i = 1;i <= n;i++)
- for(int j = 1;j <= capacity;j++){
- if(j < wt[i])
- dp[i][j] = dp[i - 1][j];
- else
- dp[i][j] = std::max(dp[i - 1][j],
- dp[i - 1][j - wt[i]] + wt[i]);
- }
- }
- int main(){
- read();
- precalc();
- if(dp[n][capacity] != capacity){
- g << "NU";
- }else{
- int res = dp[n][capacity];
- int w = capacity;
- for(int i = n;i > 0 && res > 0;i--){
- if(dp[i - 1][w] == res)
- continue;
- else{
- sol.push_back(i);
- w = w - wt[i];
- res = res - wt[i];
- }
- }
- g << "DA\n" << sol.size() << '\n';
- for(int i = (int)sol.size() - 1;i >= 0;i--)
- g << sol[i] << ' ';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement