hdu 2546 饭卡(简单DP)
2012-07-28 16:49
429 查看
简单, 但是需要细心
思路一: 首先判断m是否大于等于5
先取出来最贵的, 对其他的用m-5进行01背包,然后答案就出来了
思路二: 先判断
因为最贵50元所以对m+50进行DP
思路二:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n, m;
int price[1200], dp[1200];
while( cin>>n &&n )
{
for(int i=1; i<=n; i++)
cin>>price[i];
cin>>m;
if( m>=5)
{
sort(price+1, price+n+1);//因为n=1写为n错了很多次
memset(dp, 0, sizeof(dp));
dp[0] = 1;
for(int i=1; i<=n; i++)
{
for(int j=m+50; j>=price[i]; j--)
if(j-price[i]<=m-5)
dp[j] = dp[j] | dp[j-price[i]];
}
for(int i=m+50; i>=0; i--)
{
if(dp[i])
{
cout<<m-i<<endl;
break;
}
}
}
else cout<<m<<endl;
}
}
思路一: 首先判断m是否大于等于5
先取出来最贵的, 对其他的用m-5进行01背包,然后答案就出来了
思路二: 先判断
因为最贵50元所以对m+50进行DP
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int main() { int n, m; int price[1200], dp[1200]; while( cin>>n &&n ) { for(int i=1; i<=n; i++) cin>>price[i]; cin>>m; if( m>=5) //这里, 判断 { sort(price+1, price+n+1);//因为n=1写为n错了很多次 memset(dp, 0, sizeof(dp)); for(int i=1; i<n; i++) { for(int j=m-5; j>=price[i]; j--) dp[j] = max(dp[j], dp[j-price[i]]+price[i]); } cout<<m-dp[m-5]-price <<endl; } else cout<<m<<endl; } }
思路二:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int n, m;
int price[1200], dp[1200];
while( cin>>n &&n )
{
for(int i=1; i<=n; i++)
cin>>price[i];
cin>>m;
if( m>=5)
{
sort(price+1, price+n+1);//因为n=1写为n错了很多次
memset(dp, 0, sizeof(dp));
dp[0] = 1;
for(int i=1; i<=n; i++)
{
for(int j=m+50; j>=price[i]; j--)
if(j-price[i]<=m-5)
dp[j] = dp[j] | dp[j-price[i]];
}
for(int i=m+50; i>=0; i--)
{
if(dp[i])
{
cout<<m-i<<endl;
break;
}
}
}
else cout<<m<<endl;
}
}
相关文章推荐
- 简单DP 01 背包 饭卡HDU 2546 ( 饭卡 ) 不知道算不算是稍稍加了点贪心的思想~
- HDU 2546 饭卡 简单0-1背包+稍作处理
- 【HDU 2546】饭卡(DP+贪心)
- hdu 2546 饭卡 dp
- hdu 2546 饭卡(dp)
- HDU 2546 饭卡(贪心+DP)
- HDU 2546 饭卡 DP
- HDU 2546 饭卡 【入门DP之01背包问题】
- HDU 2546 饭卡 简单0-1背包+稍作处理
- hdu(2546)——饭卡(背包dp)
- hdu 2546 饭卡 dp
- HDU 2546 饭卡 DP(背包)
- HDU-2546 饭卡( 背包dp )
- HDU 2546 饭卡(简单01背包)
- hdu 2546 饭卡(DP)
- HDU-2546 饭卡(DP)
- 两道需要排序的dp背包下问题 -- hdu 2546 饭卡/ hdu 3466 Proud Merchants
- HDOJ(HDU).2546 饭卡(DP 01背包)
- hdu 2546 饭卡(经典dp)
- HDU2546——背包DP——饭卡