bzoj4247 挂饰 背包DP
来源:互联网 发布:vim设置python语法高亮 编辑:程序博客网 时间:2024/05/02 02:19
点击打开链接
思路:
背包问题,dp[i][j]表示在考虑第i个物品的时候,还剩下j个挂钩
注意,要按照挂钩多少排序,如果不排序的话,挂钩有可能会变成负数,然后又被加成正数
代码抄自:http://blog.csdn.net/creationaugust/article/details/48133509
这个初始化 和 这个转换: 把一开始读入体积为0的物品的体积当成1,不为0的当成-v+1来做背包.
想不到啊
dp[i][j] = max(dp[i-1][j],dp[i-1][j-a[i].x+1]+a[i].y); // dp[i][n+1]=-INF 是 j-a[i].x+1 当j=n, a[i].x=0 时
代码:
#include <bits/stdc++.h>using namespace std;typedef long long ll;#define mem(a) memset(a,0,sizeof(a))#define mp(x,y) make_pair(x,y)const int INF = 0x3f3f3f3f;const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;inline ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}//////////////////////////////////////////////////////////////////////////const int maxn = 2e3+10;ll dp[maxn][maxn];struct node{int x,y;}a[maxn];bool cmp(node A,node B){return A.x > B.x;}int main(){int n = read();for(int i=1; i<=n; i++)a[i].x=read(),a[i].y=read();sort(a+1,a+1+n,cmp);for(int i=0; i<=n; i++)dp[0][i] = dp[i][n+1] = -INF;dp[0][1] = 0;for(int i=1; i<=n; i++)for(int j=0; j<=n; j++){dp[i][j] = max(dp[i-1][j],dp[i-1][max(j-a[i].x,0)+1]+a[i].y);// if(j<a[i].x)// dp[i][j] = max(dp[i-1][j],dp[i-1][1]+a[i].y);// else// dp[i][j] = max(dp[i-1][j],dp[i-1][j-a[i].x+1]+a[i].y);}ll ans = -INF;for(int i=0; i<=n; i++)ans = max(ans,dp[n][i]);cout << ans << endl; return 0;}
0 0
- bzoj4247 挂饰 背包DP
- bzoj4247: 挂饰(01背包)
- 【BZOJ4247】挂饰,又一个奇特的背包
- 【BZOJ4247】挂饰
- bzoj4247 挂饰
- BZOJ4247: 挂饰
- [BZOJ4247] 挂饰
- 【BZOJ4247】挂饰
- bzoj4247: 挂饰
- BZOJ 4247: 挂饰 背包dp
- bzoj 4247: 挂饰 背包dp
- DP背包
- 背包 dp
- 背包dp
- 背包dp
- DP-背包
- 背包dp
- 背包dp
- iOS UIWebView处理url的打开、跳转、返回、关闭
- 【框架-MFC】调用打印机程序时出现
- markdown编辑器语法——字体、字号与颜色
- php开发笔记(一)php语法结构
- 【技术】C#入门:typeof()和GetType()的区别
- bzoj4247 挂饰 背包DP
- post方式下载文件
- Android Studio中如何使用Git和Github来管理项目
- ehcache3.2使用
- 洛谷 P2024 食物链
- maven项目打包时把依赖加到指定目录的pom插件配置
- Java Servlet Technology
- 同比增长和环比增长的区别
- CakePHP系列(二)----博客(Blog)案例(一)