bzoj4247: 挂饰(01背包)
2015-09-11 13:07
162 查看
状态:f[ i ][ j ]表示选到第 i 个物品时还剩 j 个勾
转移:f[i][j]=max(f[i-1][j-edge[i].gou+1>1?j-edge[i].gou+1:1]+edge[i].val,f[i-1][j]);
注意要先按勾数排序
转移:f[i][j]=max(f[i-1][j-edge[i].gou+1>1?j-edge[i].gou+1:1]+edge[i].val,f[i-1][j]);
注意要先按勾数排序
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; struct node { int gou,val; }edge[2500]; int cmp(node a,node b) { return a.gou>b.gou; } int n; int ans; int f[2500][2500]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d %d",&edge[i].gou,&edge[i].val); } sort(edge+1,edge+1+n,cmp); memset(f,-0x3f,sizeof(f));//别清大了 f[0][1]=0; for(int i=1;i<=n;i++) { for(int j=0;j<=n;j++) { f[i][j]=max(f[i-1][j-edge[i].gou+1>1?j-edge[i].gou+1:1]+edge[i].val,f[i-1][j]); } } for(int i=0;i<=n;i++) { ans=max(ans,f [i]); } printf("%d",ans); }
相关文章推荐
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android px、dp、sp之间相互转换
- android中像素单位dp、px、pt、sp的比较
- Android对px和dip进行尺寸转换的方法
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解
- DP问题各种模型的状态转移方程
- POJ-1695-Magazine Delivery-dp
- nyoj-1216-整理图书-dp
- TYVJ1193 括号序列解题报告
- 对DP的一点感想
- TYVJ上一些DP的解题报告
- soj1005. Roll Playing Games
- 01背包问题
- LeetCode之Maximum Product Subarray
- DP Flow
- zoj3605 Find the Marble(三维dp)
- Word Break I,II, Triangle,Palindrome Partitioning 动态规划 DP