hdu1963 完全背包(数据压缩)

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1963

hdu1963 完全背包(数据压缩)

注意:题中有一句话说债券的价钱都是1000的倍数,我之前没看到这句话,写的完全背包,知道肯定是tle,然后用二进制优化还是tle,后来才发现忽略个条件。。。。

加上这个条件的话,这个就是个比较简单的完全背包了,具体见代码。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define ll long long
const int maxn=1e5+;
const int INF=0x3f3f3f3f; int dp[maxn];
int w[],p[]; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int m,n,d;
scanf("%d%d",&m,&n);
scanf("%d",&d);
for(int i=; i<=d; i++)
{
scanf("%d%d",&w[i],&p[i]);
w[i]/=;
}
for(int k=; k<=n; k++)
{
memset(dp,,sizeof(dp));
int ans=m/;
for(int i=; i<=d; i++)
for(int j=w[i]; j<=ans; j++)
dp[j]=max(dp[j],dp[j-w[i]]+p[i]);
m+=dp[ans];
}
printf("%d\n",m);
}
return ;
}
上一篇:cell中button怎么得到对应cell的indexpath 以及关于UITableViewCellContentView的问题


下一篇:HTML入门(列表、表单、常用表单控件、浮动框架、iframe、 摘要与细节、度量标签)