本文共 638 字,大约阅读时间需要 2 分钟。
#include#include #include #include using namespace std;int dp[100001];int cash,N;struct money{ int num; int value;};money moneys[10];int main(){ while (scanf("%d%d",&cash,&N)!=EOF) { for (int i=0;i =cash)//完全背包问题 { for (int v=m.value;v<=cash;++v) { dp[v] = max(dp[v],dp[v-m.value] + m.value); } continue; } //多重背包问题 int count = m.num; int k = 1; while(k =value;--v) { dp[v] = max(dp[v],dp[v-value] +value); } count -=k; k = 2*k; } int value = count * m.value; for (int v=cash;v>=value;--v) { dp[v] = max(dp[v],dp[v-value] + value); } } cout< <
转载地址:http://ofeti.baihongyu.com/