【动态规划】Codeforces 711C Coloring Trees
来源:互联网 发布:淘宝卖家购买淘金币 编辑:程序博客网 时间:2024/06/01 08:16
题目链接:
http://codeforces.com/problemset/problem/711/C
题目大意:
给N棵树,M种颜色,已经有颜色的不能涂色,没颜色为0,可以涂色,每棵树I涂成颜色J花费PIJ。求分成K个颜色段(1112221为3个颜色段)的最小花费。无解输出-1.
题目思路:
【动态规划】
f[i][j][k]表示前i个树分成j段,最后一个颜色是k的花费。
根据当前这棵树是否可以涂色,上一棵树是否可以涂色转移。
直接枚举这个树和上棵树的颜色,N4居然没T。
////by coolxxx//#include<bits/stdc++.h>#include<iostream>#include<algorithm>#include<string>#include<iomanip>#include<map>#include<stack>#include<queue>#include<set>#include<bitset>#include<memory.h>#include<time.h>#include<stdio.h>#include<stdlib.h>#include<string.h>//#include<stdbool.h>#include<math.h>#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))#define abs(a) ((a)>0?(a):(-(a)))#define lowbit(a) (a&(-a))#define sqr(a) ((a)*(a))#define swap(a,b) ((a)^=(b),(b)^=(a),(a)^=(b))#define mem(a,b) memset(a,b,sizeof(a))#define eps (1e-8)#define J 10#define mod 1000000007#define MAX 0x7f7f7f7f#define PI 3.14159265358979323#define N 104using namespace std;typedef long long LL;int cas,cass;int n,m,lll,ans;int c[N];LL aans;LL a[N][N];LL f[N][N][N];int main(){#ifndef ONLINE_JUDGE//freopen("1.txt","r",stdin);//freopen("2.txt","w",stdout);#endifint i,j,k,l;//for(scanf("%d",&cass);cass;cass--)//for(scanf("%d",&cas),cass=1;cass<=cas;cass++)//while(~scanf("%s",s+1))while(~scanf("%d",&n)){scanf("%d%d",&m,&cas);for(i=1;i<=n;i++)scanf("%d",&c[i]);for(i=1;i<=n;i++)for(j=1;j<=m;j++)scanf("%I64d",&a[i][j]);mem(f,0x7f);c[0]=m+1,f[0][0][m+1]=0;for(i=1;i<=n;i++){if(c[i]!=0){if(c[i-1]!=0){for(j=1;j<=min(i,cas);j++){if(c[i]!=c[i-1])f[i][j][c[i]]=min(f[i][j][c[i]],f[i-1][j-1][c[i-1]]);else f[i][j][c[i]]=min(f[i][j][c[i]],f[i-1][j][c[i-1]]);}}else//c[i]!=0 c[i-1]=0{for(j=1;j<=min(i,cas);j++){for(k=1;k<=m;k++){if(k!=c[i])f[i][j][c[i]]=min(f[i][j][c[i]],f[i-1][j-1][k]);else f[i][j][c[i]]=min(f[i][j][c[i]],f[i-1][j][k]);}}}}else if(c[i-1]==0)//c[i]=0{for(j=1;j<=min(i,cas);j++){for(k=1;k<=m;k++){for(l=1;l<=m;l++){if(l==k)f[i][j][k]=min(f[i][j][k],f[i-1][j][l]+a[i][k]);else f[i][j][k]=min(f[i][j][k],f[i-1][j-1][l]+a[i][k]);}}}}else//c[i]=0,c[i-1]!=0{for(j=1;j<=min(i,cas);j++){for(k=1;k<=m;k++){if(k!=c[i-1])f[i][j][k]=min(f[i][j][k],f[i-1][j-1][c[i-1]]+a[i][k]);else f[i][j][k]=min(f[i][j][k],f[i-1][j][c[i-1]]+a[i][k]);}}}}aans=f[0][0][0];for(i=1;i<=m;i++)aans=min(aans,f[n][cas][i]);if(aans==f[0][0][0])puts("-1");else printf("%I64d\n",aans);}return 0;}/*////*/
0 0
- 【动态规划】Codeforces 711C Coloring Trees
- Codeforces Round #369 (Div. 2) C. Coloring Trees 动态规划
- codeforces 711C - Coloring Trees
- Codeforces 711C Coloring Trees
- 动态规划(Coloring Trees,cf 711C)
- codeforces C.Coloring Trees
- codeforces C. Coloring Trees
- CodeForces 711C.Coloring Trees【DP】
- codeforces 711C Coloring Trees(DP)
- Codeforces Problem 711C Coloring Trees(DP)
- CodeForces 711C - Coloring Trees DP
- CodeForces 711C.Coloring Trees【DP】
- CodeForces 711C Coloring Trees(DP)
- Codeforces 711C Coloring Trees DP
- codeforces Round_369 C. Coloring Trees
- 【Codeforces Round #369 (Div. 2)】Codeforces 711C Coloring Trees
- CodeForces - 711C Coloring Trees【给树染色】
- CodeForces 711C Coloring Trees【dp*好题】
- POJ 1364 差分约束
- (2)glShadeModel函数 GL_SMOOTH与GL_FLAT的区别
- Android Studio常用快捷键
- IT-memcache-清除缓存
- strcpy的分析
- 【动态规划】Codeforces 711C Coloring Trees
- 友盟第三方登录和分享
- android部分默认设置的修改
- 【SDL】SDL学习笔记二 定时器
- mysql取出每个分组中最新的记录
- wr703n刷openwrt智能控制--配置wifi
- 40个Java多线程问题总结
- pdf转换成word格式的完美方法
- ADB调试命令大全