专题三 · 1018

来源:互联网 发布:php网页视频直播源码 编辑:程序博客网 时间:2024/05/18 17:42

代码及解释

#include <iostream>#include <climits>#include <algorithm>// 完全背包问题// 应该很简单了,但是一直 WA =-=// 检查了好几遍,转移方程,循环边界都没问题const size_t SIZE = 10005;int p[SIZE];int w[SIZE];int dp[SIZE];int main() {    int T;    std::cin>>T;    while(T--) {        int V1, V2;        std::cin >> V1 >> V2;        int V = V2-V1;        int N;        std::cin >> N;        for(int i = 0; i < N; ++i)            std::cin >> p[i] >> w[i];        for(int i = 0; i <= V; ++i)            dp[i] = INT_MAX;        dp[0] = 0;        for(int i = 0; i < N; ++i)            for(int j = w[i]; j <= V; ++j)                dp[j] = std::min(dp[j], dp[j-w[i]]+p[i]);        if(dp[V] == INT_MAX)            std::cout << "This is impossible." << std::endl;        else            std::cout << "The minimum amount of money in the piggy-bank is "                      << dp[V]                      << "."                      << std::endl;    }}
0 0