TopCoder SRM667 250
来源:互联网 发布:越南废除汉字 知乎 编辑:程序博客网 时间:2024/05/28 15:16
这个题说的是,有n个长度为m的01串,按一定顺序填到对应的m个坑里,假设某次填坑,有k个坑之前没填过1,那么就会产生k*k的花费。问如何安排顺序使得花费最少。
dp。其实每次填坑,花费和填坑顺序没有太大关系,只需要关心之前哪些坑被填过1就行了。从另一个角度理解,其实不一定要填完n个串,只需要填上n个串出现过的所有1就可以了。那么就可以弄一个m位二进制来dp,外循环是坑的状态,内循环扫一遍所有串,尝试填进去。
现在打TC的div1还真是吃力。。基本都是爆零。今天摸索了一会才知道如何在practice room里测题。
// BEGIN CUT HERE// END CUT HERE#line 5 "OrderOfOperations.cpp"#include <string>#include <vector>#include <bitset>#include <iostream>using namespace std;int dp[1050000];const int INF = 1000000000;int fun(vector<string> s){ int n=s.size(); if(n==0)return 0; int m=s[0].size(); int t=1<<m; for(int i=0;i<t;i++){ dp[i]=INF; } int val[n+10]; for(int i=0;i<n;i++){ bitset<20> b(s[i]); val[i]=b.to_ulong(); } dp[0]=0; for(int i=0;i<t;i++){ for(int j=0;j<n;j++){ int res=i|val[j]; int NEW=val[j]&(~i); bitset<20> tmp(NEW); NEW=tmp.count(); dp[res]=min(dp[res],dp[i]+NEW*NEW); } } int all=0; for(int i=0;i<n;i++){ all|=val[i]; } return dp[all];}class OrderOfOperations {public:int minTime(vector <string> s) { return fun(s);}};
0 0
- TopCoder SRM667 250
- SRM667 DIV2 题解
- TopCoder SRM674 div1 250
- TopCoder SRM604 DIV1 250
- TopCoder SRM606 DIV1 250
- TopCoder
- topcoder
- Topcoder
- topcoder
- topcoder
- Topcoder
- topcoder SRM 543 div2 250
- topcoder SRM 541 div2 250
- TopCoder SRM 582 DIV2 250
- topcoder SRM 548 DIV2 250
- TopCoder SRM484 div1 250 题解
- topcoder 题目250分(赋答案)
- Topcoder 第一题 SRM493 250 AmoebaDivTwo
- leakcanary作者发现的一个Dialog的各种listener容易引发的内存泄露问题
- 终于拿到了软件开发的第一桶金
- 《剑指Offer》面试题:员工的年龄进行排序
- 代码段、数据段、BSS段、堆、栈
- iOS - UICollectionView 自定义布局之风火轮[译] (原版为swift,我这里的实现改为OC)
- TopCoder SRM667 250
- jdk+tomcat安装部署说明文档
- 数据结构之一元多项式运算操作5-(加,减,乘,化简)
- storm
- Java学习笔记之数据库(触发器、事物、索引、投影和除、视图、存储过程和函数 )含各种链)___ 一直补充
- C++中的字符串
- ViewPager+可缩放ImageView的使用
- [iOS]给UILabel赋HTML数据。
- 自己整理的java泛型(仅限于自己使用)