7 7 7 月 29 29 29 日 d p dp dp 训练总结

时间安排

考试时间:8点到10点20

8 : 00 ∼ 8 : 20 8:00\sim8:20 8:00∼8:20 : 把题目通读一遍第一题像是邻接矩阵,第二题一看就是分组背包(但是没思路),第三题也是一看就是 d p dp dp 的题,所以打算从第三题下手

8 : 20 ∼ 10 : 00 8:20\sim10:00 8:20∼10:00 : 一直在写 T 3 T3 T3 中间有几次去看了看别的题,但是都没有思路,最后总算是用状态压缩把 T 3 T3 T3 给 A A A 了;

10 : 00 ∼ 10 : 20 10:00\sim10:20 10:00∼10:20 : 摆烂了,随便写了写 T 2 T2 T2 和 T 3 T3 T3 ,当然没有得分。

总分: 0 + 0 + 100 = 100 0+0+100=100 0+0+100=100;

正解 & \& & 总结

T 1 T1 T1 题目链接

其实也是 d p dp dp 的题目~~(不然为啥叫 dp​ 训练)~~

暴力 d p dp dp 做法~~(虽说暴力但是我也想不出来)~~:

由于 n ≤ 40 n\leq40 n≤40 的数据规模比较小可以直接五重循环暴力枚举

d p [ i ] [ j ] [ p ] dp[i][j][p] dp[i][j][p] 表示从 i i i 到 j j j 这些人中 p p p 是否能获胜 ;

而且还要注意输入的时候直接转变成链式的,最后输出的时候也要判断;

具体代码的细节如下

int main()
{freopen("data.in","r",stdin);freopen("data.out","w",stdout);int n;cin>>n;for (int i=1;i<=n;++i)for (int j=1;j<=n;++j){cin>>a[i][j];a[i+n][j]=a[i][j+n]=a[i+n][j+n]=a[i][j];} int m=n<<1;for (int i=1;i<=m;++i) f[i][i][i]=1;for (int len=2;len<=m;++len)for (int i=1;i+len-1<=m;++i){int j=i+len-1;for (int k=i;k<j;++k)//枚举i到j中间的人for (int p1=i;p1<=k;++p1)if (f[i][k][p1])//如果p1可以的话就继续枚举for (int p2=k+1;p2<=j;++p2)if (f[k+1][j][p2]) if (a[p1][p2]==1) f[i][j][p1]=1;//比较p1和p2谁更强else f[i][j][p2]=1;     } for (int i=1;i<=n;++i) {int flag=0;for (int j=1;j<=n;++j) if (f[j][j+n-1][i]==1){flag=1;break;}cout<<flag<<endl;}return 0;
}
简化写法

设置状态不一样可以省略一维,并且 i f if if 语句很关键,就不用像暴力做法一样枚举 p 1 , p 2 p1,p2 p1,p2 了;

int n;
int a[maxn*2][maxn*2];//两倍的数组(解决环)
int f[maxn*2][maxn*2];//f[i][j]表示第i个人或第j个人能把i+1~j-1的人打败
void work()
{for(int i=1;i<=2*n;i++)f[i][i+1]=true;//初值 for(int len=3;len<=n+2;len++)for(int i=1;i<=2*n-2;i++)//保证i<j {int j=i+len-1;if (j>2*n)  break; for(int k=i+1;k<=j-1;k++)if((i<k) &&(k<j) &&(a[i][k]==1 ||a[j][k]==1) &&(f[i][k]==true) &&(f[k][j]==true))//k是中间点,位于i和j之间,两端的i和j能打败k,i或k能打败i和k之间的人,j或k能打败j和k之间的人,//那么i或j就能打败i和j之间的人 f[i][j]=true;}
}
T 2 T2 T2 题目链接

考试最后的时候我就把分组背包的模板给敲上去了,因为题目说每组中可以选多个连续的物品,跟分组背包中一组选一个物品不同,考试的时候就懵逼了,我当时还以为要再加一个背包的模型。

后来听杰哥讲完之后茅塞顿开,只需要在输入完之后枚举每组中长度为 1 ∼ n i 1\sim n_i 1∼ni​ 的物品的体积总和再放回组里面,这样完全就是分组背包的模型。

另外,这道题让求的的就是体积的最大值,所以背包中物品的价值和体积是一样的。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int v,t;
int n[12],a[110],sum[110],cnt[12];
int dp[5050],w[12][100010];
int main()
{freopen("bag.in","r",stdin);freopen("bag.out","w",stdout);scanf("%d%d",&v,&t);for(int i=1;i<=t;i++){scanf("%d",&n[i]);for(int j=1;j<=n[i];j++)  scanf("%d",&a[j]),sum[j]=sum[j-1]+a[j];for(int len=1;len<=n[i];len++)  for(int l=1;l<=n[i];l++){int r=l+len-1;if(r>n[i])  break;w[i][++cnt[i]]=sum[r]-sum[l-1];}w[i][++cnt[i]]=0;//存在不选的情况 }for(int i=1;i<=t;i++)for(int j=v;j>=0;j--)for(int k=1;k<=cnt[i];k++)if(j>=w[i][k])  dp[j]=max(dp[j],dp[j-w[i][k]]+w[i][k]);for(int i=v;i>=0;i--)  if(dp[i])  {printf("%d",v-dp[i]);return 0;}return 0;
}
T 3 T3 T3 题目链接

最开始设置了十二维数组,写了半天感觉难受得要死,仔细一想这不是状压吗;

花了两个小时搞出来了(对位运算掌握不够熟练),不多说了,状压就好了。

代码:

int n,m;
struct mon
{int v;int num;int c[15];
};
mon a[1010];
int dp[(1<<15)],vis[1010];
void work()
{scanf("%d%d",&n,&m);memset(vis,0,sizeof(vis));for(int i=1;i<=m;i++){scanf("%d%d",&a[i].v,&a[i].num);for(int j=1;j<=a[i].num;j++){scanf("%d",&a[i].c[j]);vis[i]=(vis[i]|(1<<a[i].c[j]-1));//单独开一个数组就不用在动态转移时多加一重循环 }  }for(int i=1;i<(1<<n);i++)  dp[i]=inf; for(int i=1;i<=m;i++)//把每组的怪物给加上去 for(int j=0;j<(1<<n);j++)//怪物的情况 {int mask=j|vis[i];dp[mask]=min(dp[mask],dp[j]+a[i].v);}if(dp[(1<<n)-1]==inf)  printf("-1");else printf("%d",dp[(1<<n)-1]);
}

反思

时间分配极度不合理,第三题前面沿着错的思路跑了好久,如果第二题仔细想想的话是能过得,但是最后二十分钟摆烂了,所以要坚持到最后一刻,说不定能突然蹦出来思路呢。

7月29日dp训练总结相关推荐

  1. iPhone13 系列售价曝光:没有涨价;曝华为P50系列7月29日发布;丁磊称专业比学校更重要:你同意吗?|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  2. 4 月 29 日晚 8 点,为你揭秘联邦学习背后数据可用不可见的奥秘

    随着机器学习技术的不断发展和用户数据量的不断增多,如何在保障数据安全的同时实现平台间机器学习模型的协作训练成为了一个新兴话题.2016年,谷歌提出"联邦学习"(Federated ...

  3. 2014年11月3日至2014年12月29日

    2014年11月3日 1.在MyEclipse中运行写好的MapReducer,抛出: 2014-11-0310:59:24,729 WARN [main] util.NativeCodeLoader ...

  4. 2021年8月29日到2021年9月4日

    参考计算机视觉最新理论2021年8月29日到2021年9月4日 - 云+社区 - 腾讯云 1.Learning to Discover Reflection Symmetry via Polar Ma ...

  5. 关于2020年8月7日—8月29日实习学习到的内容

    关于2020年8月7日-8月29日实习学习到的内容 我是一名大三(准大四)的学生,本专业学习通信工程,从三月份自学前端至今,七月份找到了一份实习,感觉在实习中学习到的内容会比较深入一点叭.关于这篇文章 ...

  6. 忍者必须死3 通关 服务器维护,忍者必须死38月29日停服维护了什么 忍者必须死38月29日停服维护公告_游戏堡...

    在<忍者必须死3>手游中8月29日究竟更新了哪些有趣的内容呢?相信不少玩家对此也都是非常关心的,那么想了解的话下面就来看一下吧! 忍者必须死32月29日停服维护了什么 亲爱的忍忍: 为了给 ...

  7. 极客日报:iPhone13 系列售价曝光:没有涨价;曝华为P50系列7月29日发布;丁磊称专业比学校更重要:你同意吗?

    一分钟速览新闻点! 曝华为 P50 系列 7 月 29 日发布:但主推 4G 版 腾讯新全球总部开建:内网征名第一叫"鹅城" 丁磊称专业比学校更重要:专业>学校>城市, ...

  8. 立即报名:7 月 29 日推荐系统峰会 2022

    欢迎与来自 NVIDIA.阿里巴巴.腾讯.美团等专家们,一同参加由 NVIDIA 主办的推荐系统峰会. 7 月 29 日由 NVIDIA 所主办的[推荐系统峰会 2022]下周即将登场!欢迎与 NVI ...

  9. 4月29日监理师课程作业

    软考信息系统监理师:2016年4月29日作业 一.信息应用系统分析设计阶段监理 1.需求分析的进入条件是什么?(记) 答:①业主单位与承建单位正式签订建设合同, ②并对初步的项目开发计划达成一致意见. ...

最新文章

  1. 邮件回复功能失效 谁遇到过?
  2. eclipse开发javaweb项目配置tomcat
  3. mysql schedule every_Mysql 架构及优化之-定时计划任务
  4. thinkphp跨库操作代码实例
  5. 微信打开页面底部显示“原页面已由QQ浏览器云转码”解决办法
  6. 最好的计划是略有闲余的计划,用于缓冲必然出现的错误与突发事件(转)
  7. mysql在恢复数据时出现“table full”报错
  8. HTML中id和name的区别(js中的注意事项)
  9. Android 关机流程 从kernel到framework
  10. Java JDK 配置环境变量
  11. 数学建模之预测方法总结与案例
  12. Oozie安装ExtJs教程
  13. Easyui三级目录菜单+手风琴+spring mvc
  14. 在家或者公司如何登录服务器
  15. linux 查看内存大小命令,Linux查看命令:CPU型号,内存大小,硬盘空间
  16. 怎么用python实现序列比对_生信学习笔记——Python+Mafft实现批量化多序列比对
  17. Ext Gantt甘特图1.2破解及方法
  18. 1:在/tmp目录下,新建目录director新建三个txt文件,分别命名为file1、file2、file3. 用vi编辑器分别在三个文件中输入内容。
  19. cannot find -lGL问题的解决方法
  20. TCP连接的建立与终止

热门文章

  1. 烟、是一种感情,烟能够忘记一切,也能想起一切
  2. 重走长征路---OI每周刷题记录---11月4日 2013
  3. MLB经理和第九局谬论
  4. 海睿思分享 | 浅谈企业数据资产管理
  5. http常见状态码及设置方法
  6. python里str什么意思_str在python中是什么意思
  7. 是工人养活了资本家还是资本家养活了工人?
  8. Windows程序设计-菜单及其它资源
  9. 移动公司客户价值分析
  10. [转]一位HR对应届毕业生的不满[招聘|应聘]