hdu 2546 饭卡(简单DP)
来源:互联网 发布:淘宝直通车推广方案 编辑:程序博客网 时间:2024/05/21 14:47
简单, 但是需要细心
思路一: 首先判断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[n]<<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; } }
- hdu 2546 饭卡(简单DP)
- hdu~1422(简单dp)
- hdu 5074(简单dp)
- hdu 2881(简单dp)
- HDU-2546 饭卡(DP)
- hdu 2546 饭卡(dp)
- HDU 2546 饭卡 DP
- hdu 2546 饭卡 dp
- hdu 2546 饭卡 dp
- HDU 1231 (简单DP问题)
- HDU 3485 Count 101(简单DP)
- HDU 4705 Y(简单树形DP)
- Hdu 1176 免费馅饼(简单DP)
- HDU 2089 数位dp (简单)
- HDU 1176 免费馅饼 (简单DP)
- HDU 2571 命运 (简单DP)
- Hdu 2571 命运(简单DP)
- hdu 1520(简单树形dp)
- sp11--cheat
- 进程管理(一)
- 解决jquery名称冲突
- VC6 各link错误解决
- javascript常用函数大全(一)
- hdu 2546 饭卡(简单DP)
- Oracle 11g系列—1—基础回顾
- 中缀表达式计算器
- Shell脚本的中的输入变量
- 模运算
- Myeclipse包视图的切换
- android程序完全退出步骤
- javascript常用函数大全 + javascript事半功倍/速成系列 + javascript技巧
- android – 多屏幕适配相关