Educational Codeforces Round 39 (Rated for Div. 2)D. Timetable(dp)
2018-03-08 11:45
671 查看
先对每一行进行处理,每一行中g[i][j]代表第i行除去j节课最少上的课数。
知道了g[i][j],进行记忆化搜索,dp[i][j]代表第i行剩下k节课可以逃,最少上的课数。
两个地方需要dp,水平不够啊啊啊啊啊。O(∩_∩)O哈哈~
#include <bits/stdc++.h>
#define pb push_back
#define fore(i,a,b) for(int i=a,ThxDem=b;i<ThxDem;++i)
#define SZ(x) ((int)(x).size())
using namespace std;
typedef long long ll;
int n,m,k;
char s[512];
int g[512][512];
int dp[512][512];
int f(int i, int k){
int& r=dp[i][k];
if(r>=0)return r;
if(i==n)r=0;
else {
r=1<<30;
for(int j=0;j<=k;j++)r=min(r,g[i][j]+f(i+1,k-j));
}
return r;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
vector<int> x;
for(int i=0;i<n;i++){
scanf("%s",s);
x.clear();
for(int j=0;j<m;j++)if(s[j]=='1')x.pb(j);
for(int j=0;j<(int)x.size();j++){
g[i][j]=10000;
for(int k=0;k<=j;k++)
{
//cout<<1+x[x.size()-1-(j-k)]-x[k]<<" "<<g[i];
g[i][j]=min(g[i][j],(1+x[x.size()-1-(j-k)]-x[k]));}
}
//cout<<endl;
//cout<<"<<"<<endl;
}
memset(dp,-1,sizeof(dp));
printf("%d\n",f(0,k));
return 0;
}
知道了g[i][j],进行记忆化搜索,dp[i][j]代表第i行剩下k节课可以逃,最少上的课数。
两个地方需要dp,水平不够啊啊啊啊啊。O(∩_∩)O哈哈~
#include <bits/stdc++.h>
#define pb push_back
#define fore(i,a,b) for(int i=a,ThxDem=b;i<ThxDem;++i)
#define SZ(x) ((int)(x).size())
using namespace std;
typedef long long ll;
int n,m,k;
char s[512];
int g[512][512];
int dp[512][512];
int f(int i, int k){
int& r=dp[i][k];
if(r>=0)return r;
if(i==n)r=0;
else {
r=1<<30;
for(int j=0;j<=k;j++)r=min(r,g[i][j]+f(i+1,k-j));
}
return r;
}
int main(){
scanf("%d%d%d",&n,&m,&k);
vector<int> x;
for(int i=0;i<n;i++){
scanf("%s",s);
x.clear();
for(int j=0;j<m;j++)if(s[j]=='1')x.pb(j);
for(int j=0;j<(int)x.size();j++){
g[i][j]=10000;
for(int k=0;k<=j;k++)
{
//cout<<1+x[x.size()-1-(j-k)]-x[k]<<" "<<g[i];
g[i][j]=min(g[i][j],(1+x[x.size()-1-(j-k)]-x[k]));}
}
//cout<<endl;
//cout<<"<<"<<endl;
}
memset(dp,-1,sizeof(dp));
printf("%d\n",f(0,k));
return 0;
}
相关文章推荐
- Educational Codeforces Round 39 (Rated for Div. 2) codeforces946 D. Timetable-数据处理+分组背包(处理炸裂)
- Educational Codeforces Round 39 (Rated for Div. 2) D. Timetable (背包)
- Educational Codeforces Round 39 (Rated for Div. 2)(A-D)(水题 + 模拟 + 贪心模拟 + DP)
- Educational Codeforces Round 39 (Rated for Div. 2) D. Timetable(动态规划)
- Educational Codeforces Round 39 (Rated for Div. 2) E Largest Beautiful Number
- Educational Codeforces Round 39 (Rated for Div. 2) G
- Educational Codeforces Round 40 (Rated for Div. 2) F. Runner's Problem 前缀和求区间覆盖 矩阵快速幂优化DP 离散化
- Educational Codeforces Round 39 (Rated for Div. 2) 946E E. Largest Beautiful Number
- Educational Codeforces Round 39 (Rated for Div. 2) codeforces946 A.Partition B.Weird Subtraction Process C.String Transformation
- Educational Codeforces Round 39 (Rated for Div. 2) C. String Transformation
- Educational Codeforces Round 39 (Rated for Div. 2) A. Partition(水题)
- Educational Codeforces Round 39 (Rated for Div. 2) B. Weird Subtraction Process
- Educational Codeforces Round 39 (Rated for Div. 2)
- Educational Codeforces Round 33 (Rated for Div. 2) A-C题解
- Educational Codeforces Round 33 (Rated for Div. 2)
- Educational Codeforces Round 33 (Rated for Div. 2) 题解
- 【Educational Codeforces Round 48 (Rated for Div. 2) C】 Vasya And The Mushrooms
- Educational Codeforces Round 38 (Rated for Div. 2) 【B】 【双指针】
- Educational Codeforces Round 36 (Rated for Div. 2)C. Permute Digits(贪心)
- 记一场(伪)CF (Educational Codeforces Round 40 (Rated for Div. 2) )