let's start Code

UVA-10130

Problem link: UVA-10130

Topic: Knapsack


Solution:

#include<bits/stdc++.h>
using namespace std;
int wt[12345], val[12345];

int Knapsack(int w, int wt[], int val[], int n)
{
    int k[n+1][w+1];

    for(int i = 0; i <= n; i++)
    {
        for(int j = 0; j <= w; j++)
        {
            if(i == 0 || j == 0)k[i][j] = 0;
            else if(wt[i-1] <= j)
                k[i][j] = max(val[i-1]+k[i-1][j-wt[i-1]], k[i-1][j]);
            else k[i][j] = k[i-1][j];
        }
    }
    return k[n][w];
}

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        memset(val, 0, sizeof(val));
        memset(wt, 0, sizeof(wt));
        scanf("%d",&n);
        for(int i = 0; i < n; i++)
        {
            scanf("%d%d",&val[i], &wt[i]);
        }
        int k,W;
        scanf("%d",&k);
        int ans =0;
        while(k--)
        {
            int x;
            scanf("%d",&x);
            ans += Knapsack(x, wt, val, n);
        }
        printf("%d\n", ans);
    }
    return 0;
}

Share:

UVA-10004

#include<bits/stdc++.h>
using namespace std;
int main()
{
    while(1)
    {
        int n,a;
        cin >> n;
        if(n == 0)
        {
            return 0;
        }
        cin >> a;
        int ck = 0;
        vector<int> edge[201];
        for(int i = 0; i < a; i++)
        {
            int p,q;
            cin>>p>>q;
            if(i == 0)ck = p;
            edge[q].push_back(p);
            edge[p].push_back(q);
        }
        int color[201];
        int is = true;
        while(1)
        {
            for (int i = 0; i < 200; ++i)
            {
                color[i] = -1;
            }
            color[ck] = 1;
            queue<int>q;
            while(!q.empty())q.pop();
            q.push(ck);
            while(!q.empty())
            {
                int u = q.front();
                // cout<<u<<" //// ";
                q.pop();
//        if(edge[u][u] == 1)return false;
                //cout<<edge[u].size()<<endl;
                for(int i = 0; i < edge[u].size(); i++)
                {
                    int v = edge[u][i];
                    //cout<<color[v]<<" "<<color[u]<<" --> "<<u<<" "<<v<<endl;
                    if(v != u && color[v] == -1)
                    {
                        color[v] = 1 - color[u];
                        q.push(v);
                    }
                    else if(color[v] == color[u] && u != v)
                    {
                        is =  false;
                        break;
                    }
                }
            }
            break;
        }
        if((is))
        {
            cout<<"BICOLORABLE.\n";
        }
        else
        {
            cout<<"NOT BICOLORABLE.\n";
        }
    }
    return 0;
}

Share:

About

let's start CODE

Popular Posts