Practice for Microsoft 2015 Online Test register

Ended

Participants:1406

Verdict:Accepted
Score:100 / 100
Submitted:2014-10-18 12:49:48

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
int need[500];
int value[500];
int dp[500][100001];
int main()
{
    int N,M;
    cin>>N>>M;
    for(int i = 0; i < N; ++i)
    {
        cin>>need[i]>>value[i];
    }
    for(int i = need[0]; i<=M; ++i)
    {
        dp[0][i] = value[0];
    }
    for(int i = 1; i < N; ++i)
    {
        for(int j = 0; j < need[i]; ++j)
        {
            dp[i][j] = dp[i-1][j];
        }
        for(int j = need[i]; j<=M; ++j)
        {
            int left = dp[i-1][j];
            int right = dp[i-1][j-need[i]]+value[i];
            dp[i][j] = left>right?left:right;
        }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX