【动态规划】Vijos P1071 新年趣事之打牌
来源:互联网 发布:同时删除多个表的数据 编辑:程序博客网 时间:2024/05/22 07:21
需要在状态转移的时候记录转移的路径,注释中标出的一行代码非常重要。
题目链接:https://vijos.org/problems/P1071
#include<iostream>#include<stack>#include<string.h>#include<algorithm>#define SIZE 100005using namespace std; int main(){ int totalW,sum; int n,wei[105]; int dp[SIZE],path[SIZE]; memset(dp,0,sizeof(dp)); memset(path,0,sizeof(path)); cin>>totalW>>n; sum=0; for(int i=0;i<n;i++){ cin>>wei[i]; sum+=wei[i]; } int left=sum-totalW; dp[0]=1; for(int i=0;i<n;i++){ for(int j=left;j>=wei[i];j--){ //该条语句非常关键 if((dp[j]==0) && (dp[j-wei[i]]>0)) path[j]=i+1; dp[j]+=dp[j-wei[i]]; } } if(dp[left]==0) cout<<0<<endl; else if(dp[left]>1) cout<<-1<<endl; else if(dp[left]==1){ stack<int> s; while(s.empty()==false) s.pop(); while(path[left]!=0){ s.push(path[left]); left=left-wei[path[left]-1]; } while(s.size()>1){ int tmp=s.top(); cout<<tmp<<" "; s.pop(); } cout<<s.top(); cout<<endl; } //system("pause"); return 0;}
- 【动态规划】Vijos P1071 新年趣事之打牌
- |Vijos|动态规划|P1071 新年趣事之打牌
- Vijos P1071 新年趣事之打牌(动态规划,背包,统计方案数)
- Vijos - P1071 新年趣事之打牌
- vijos P1071新年趣事之打牌
- Vijos P1071新年趣事之打牌
- Vijos P1071 新年趣事之打牌
- vijos 1071 新年趣事之打牌
- 新年趣事之打牌
- 新年趣事之打牌
- 新年趣事之打牌
- 1071新年趣事之打牌——vijos
- 新年趣事之打牌_DP
- vijosP1071 新年趣事之打牌
- 1071.新年趣事之打牌
- Vijos 1069 新年趣事之红包(动态规划最短路)
- 新年趣事之债务vijos
- Vijos P1072-新年趣事之债务【物理】
- 类型与字节
- A Few Things To Do For The New Year
- Mac 下搭建Android开发环境
- C++程序运行时内存布局之----------局部变量,全局变量,静态变量,函数代码,new出来的变量
- ARM汇编中ldr与adr的区别
- 【动态规划】Vijos P1071 新年趣事之打牌
- access数据库使用水晶报表(PUSH)推模式实现多数据源含子报表的订单打印
- 勇敢挑战生活的考验 读后感
- Web Application Security Software dot defender
- 关于求余的符号位
- JavaScript 对象定义
- 正则表达式30分钟入门教程
- lplImage格式与Mat格式之间转换
- Hibernate问题与解决