/*
zju 2014/ hdoj 1114-Piggy-Bank
written by lky
4 lky 109MS 0K 916B C++ 2008-03-06 14:48:16
动态规划->
状态表示:dp[i]表示容量为i时达到的最小值,如果不可能则是-1
状态转移:由dp[i]产生出dp[k],
dp[k] = min(dp[k], dp[i]+a[j].v) dp[k]!=-1
dp[k] = dp[i]+a[j].v dp[k] =-1
(k = i+a[j].w, j=1-n, k<=m)
优化:先根据物品的重量从小到大的排序,然后再dp
*/
#include<iostream>
#include <algorithm>
using namespace std;
struct Item
{
int v,w;
};
bool comp(Item i1, Item i2)
{
if(i1.w < i2.w)
return true;
return false;
}
int main()
{
int dp[10001];
Item a[501];
int n, m, N;
int i, j, k;
int m1, m2;
scanf("%d", &N);
while (N--)
{
scanf("%d%d", &m1, &m2);
m = abs(m1-m2);
scanf("%d", &n);
for (i=0; i<n; ++i)
{
scanf("%d%d",&a[i].v, &a[i].w);
}
memset(dp, -1, sizeof(dp));
dp[0] = 0;
sort(a, a+n, comp);
for (i=0; i<=m; ++i)
{
if(dp[i] != -1)
{
for (j=0; j<n; ++j)
{
k = i + a[j].w;
if(k > m)
break;
if(dp[k]==-1 || dp[k] > dp[i]+a[j].v)
dp[k] = dp[i]+a[j].v;
}
}
}
if(dp[m] == -1)
printf("This is impossible./n");
else
printf("The minimum amount of money in the piggy-bank is %d./n", dp[m]);
}
return 0;
}
zju 2014/ hdoj 1114-Piggy-Bank
written by lky
4 lky 109MS 0K 916B C++ 2008-03-06 14:48:16
动态规划->
状态表示:dp[i]表示容量为i时达到的最小值,如果不可能则是-1
状态转移:由dp[i]产生出dp[k],
dp[k] = min(dp[k], dp[i]+a[j].v) dp[k]!=-1
dp[k] = dp[i]+a[j].v dp[k] =-1
(k = i+a[j].w, j=1-n, k<=m)
优化:先根据物品的重量从小到大的排序,然后再dp
*/
#include<iostream>
#include <algorithm>
using namespace std;
struct Item
{
int v,w;
};
bool comp(Item i1, Item i2)
{
if(i1.w < i2.w)
return true;
return false;
}
int main()
{
int dp[10001];
Item a[501];
int n, m, N;
int i, j, k;
int m1, m2;
scanf("%d", &N);
while (N--)
{
scanf("%d%d", &m1, &m2);
m = abs(m1-m2);
scanf("%d", &n);
for (i=0; i<n; ++i)
{
scanf("%d%d",&a[i].v, &a[i].w);
}
memset(dp, -1, sizeof(dp));
dp[0] = 0;
sort(a, a+n, comp);
for (i=0; i<=m; ++i)
{
if(dp[i] != -1)
{
for (j=0; j<n; ++j)
{
k = i + a[j].w;
if(k > m)
break;
if(dp[k]==-1 || dp[k] > dp[i]+a[j].v)
dp[k] = dp[i]+a[j].v;
}
}
}
if(dp[m] == -1)
printf("This is impossible./n");
else
printf("The minimum amount of money in the piggy-bank is %d./n", dp[m]);
}
return 0;
}