poj 1837 Balance

题目链接:http://poj.org/problem?id=1837

    用DP求解,相当与01背包。起初依然是没有想到具体的思路,看了下解题报告后发现与01背包如此接近。

    

    从此题开始进入DP模式... 

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std ;
int dp[20][15010], C[25], G[25] ;
int main(){
    int c, g, i, j, k ;
    while(~scanf("%d%d", &c, &g)){
        for(i=1; i<=c; i++)
            cin >> C[i] ;
        for(i=1; i<=g; i++)
            cin >> G[i] ;
        memset(dp, 0sizeof(dp)) ;
        dp[0][7500] = 1 ;
        for(i=1; i<=g; i++){
            for(j=1; j<=15000; j++){
                if(dp[i-1][j])
                    for(k=1; k<=c; k++)
                        dp[i][j+G[i]*C[k]] += dp[i-1][j] ;
            }
        }
        cout << dp[g][7500] << endl ;
    }
    return 0 ;

} 

原文地址:https://www.cnblogs.com/xiaolongchase/p/2214317.html